假设我只想通过传递一个函数指向该函数来从我的一个文件中公开一个函数.声明该函数是否安全static
?编译器是否允许进行任何使我的函数指针无效的柔道,或者在该文件的上下文之外使其无意义,因为该函数被声明为特定于该文件?
不是我的代码,而是一个(愚蠢)我的意思的例子:
void static cool_function(void);
void extern (*cool_function_ptr)(void); // Actually, I’m not sure of where the `extern` goes in a function-
// pointer declaration. Damn you, confusing function-pointer syntax!
Run Code Online (Sandbox Code Playgroud)
鉴于该代码(或其语法正确的近似),cool_function_ptr
从另一个文件访问是否非法?
所以,我正在研究一个普通的C(ANSI 9899:1999)项目,我正在试图弄清楚从哪里开始:Unicode,UTF-8和所有爵士乐.
具体来说,它是一个语言解释器项目,我有两个主要的地方,我需要处理Unicode:读取源文件(表面上支持Unicode标识符的语言等),以及'字符串'对象.
我熟悉所有关于Unicode,UTF-7/8/16/32和UCS-2/4的明显基础知识,等等......我主要是寻找有用的,特定于C的(也就是说,请没有C++或C#,这就是之前在SO上记录的所有资源)关于实现Unicode友好的东西的"后续步骤"的资源......在C.
任何链接,联机帮助页,维基百科文章,示例代码都非常受欢迎.我还将尝试在原始问题中维护此类资源的列表,以供稍后发生的任何人使用.
man 3 iconv
(以及iconv_open
和iconvctl
)libbasekit
,似乎包括轻型Unicode处理工具这不是具体解决方案的具体问题; 但它反而是对我无法找到关于如何为哈希表和类似任务选择好的哈希函数的任何好的Stack Overflow问题的回应.
所以!让我们来谈谈哈希函数,以及如何选择哈希函数.如果编程菜鸟需要为他们的特定任务选择一个好的哈希函数,那么选择一个呢?简单快速的Fowler-Noll-Vo什么时候适合?他们什么时候应该在MurmurHash3中供应?在比较各种选项时,您是否有良好的资源链接?
这一章在现实世界中OCaml中描述了不同数据类型的运行时内存布局。但是,没有关于惰性值的讨论。
lazy_t
实现,即它的运行时表示形式是什么以及编译器内置的主要操作是什么?链接到源代码将不胜感激。我查看了CamlinternalLazy模块,但是仅基于对Obj
模块中函数的调用,似乎很难解读实际的表示形式。注意:此问题与 OCaml编译器/运行时有关。据我所知,有如何偷懒值应该由没有实施标准规范的 ocaml的编译器/运行。
在我的一个项目中,一旦我的构建脚本尝试使用以下命令获取所有Git标签,Travis构建就会失败,然后才能访问我的任何构建系统或代码git fetch --tags
:
`` git fetch --tags --verbose
POST git-upload-pack (350 bytes)
POST git-upload-pack (788 bytes)
POST git-upload-pack (797 bytes)
From https://github.com/ELLIOTTCABLE/bs-sedlex
= [up to date] fix-ci -> origin/fix-ci
* [new tag] sedlex-1.99.2 -> sedlex-1.99.2
* [new tag] v1.99.3 -> v1.99.3
...
* [new tag] v20.0.0-pre.2 -> v20.0.0-pre.2
Fetching submodule ppx-sedlex
POST git-upload-pack (122 bytes)
From https://github.com/ELLIOTTCABLE/ppx-sedlex
= [up to date] develop -> origin/develop
= [up to date] master -> origin/master
...
= [up to date] v20.0.0-pre.2 -> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 VSCode 扩展上进行调试/开发。为此,我需要在调试“扩展开发主机”中禁用所有(许多)其他扩展。
\n但是,这样做会保存到我的用户首选项,然后导致 \xe2\x80\xa6 我的所有其他 VScode 实例 \xe2\x80\xa6 停止具有任何扩展名。
\n如何在“扩展开发主机”中禁用我的其他日常扩展而不破坏我的正常用户配置?有没有办法说服 EDH 重复可靠地使用不同的设置文件或配置路径或其他东西?
\n我正在尝试在Mac OS X API(音频队列服务)中遵循C++接口的教程,但是在Cocoa(实际上只是基础)应用程序(实际上只是一个'工具').它有一个如下所示的结构:
static const int kNumberBuffers = 3; // 1
struct AQPlayerState {
AudioStreamBasicDescription mDataFormat; // 2
AudioQueueRef mQueue; // 3
AudioQueueBufferRef mBuffers[kNumberBuffers]; // 4
AudioFileID mAudioFile; // 5
UInt32 bufferByteSize; // 6
SInt64 mCurrentPacket; // 7
UInt32 mNumPacketsToRead; // 8
AudioStreamPacketDescription *mPacketDescs; // 9
bool mIsRunning; // 10
};
Run Code Online (Sandbox Code Playgroud)
我将第4项转换为Objective-C时遇到了很多麻烦,因为我无法弄清楚如何@synthesize
使用C数组.具体来说,这是我到目前为止:
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioQueue.h>
@interface PlayerState : NSObject {
AudioStreamBasicDescription dataFormat;
AudioQueueRef queue;
AudioQueueBufferRef _buffers[3];
int audioFile; // make this an actual type?
UInt32 …
Run Code Online (Sandbox Code Playgroud) 我对var
关键字遇到了一个非常奇怪(对我而言)的问题.我把它减少到一个相当小的测试用例,并发现它在Node.js(因此,V8和Chrome),Safari 4的检查员(因此,Nitro)和FireBug(显然,SpiderMonkey)中展示.我本来准备一个错误报告,但因为它是如此广泛地显示,我会认为我完全误解了JavaScript的应该是怎样的范围和查找变量.
测试用例非常小,在GitHub上:http://gist.github.com/260067.第一个和第二个示例之间的唯一区别是包含var
关键字.
这里也是一个类似的测试案例,以不同的方式表现出同样的"问题":https://gist.github.com/698b977ee0de2f0ee54a
编辑:为了排除试图解释级联范围如何工作的更多答案,我对此非常熟悉.我的问题是,我不明白为什么下面的代码"作品"(因为它alert()
S"外,"其次是"内部",然后再"外"):
(function(){
var foo = 'outer';
alert("Outer `foo`: " + foo);
(function(){
foo = 'inner';
alert("Inner `foo`: " + foo);
var foo;
})();
alert("Outer `foo`: " + foo);
})();
Run Code Online (Sandbox Code Playgroud)
的var foo;
在完全不相关的位置,以重新分配发生foo
; 那么为什么它会以非常实质的方式影响这项任务呢?
有几种特定于shell的方法可以在字符串中包含"unicode literal".例如,在Bash中,引用的字符串扩展机制$''
允许我们直接嵌入一个不可见的字符:$'\u2620'
.
但是,如果您尝试编写通用的跨平台shell脚本(通常,这可以被截断为"以Bash,Zsh和Dash运行."),这不是便携式功能.
我可以使用如下构造在ASCII表(八进制数字空间)中移植实现任何内容:
WHAT_A_CHARACTER="$(printf '\036')"
Run Code Online (Sandbox Code Playgroud)
...但是,POSIX/Dash printf
仅支持八进制转义.
通过将任务转化为更全面的编程环境,我显然也可以实现完整的Unicode空间:
OH_CAPTAIN_MY_CAPTAIN="$(ruby -e 'print "\u2388"')"
TAKE_ME_OUT_TONIGHT="$(node -e 'console.log("\u266C")')"
Run Code Online (Sandbox Code Playgroud)
那么:将这样的字符编码成shell脚本的最佳方法是:
dash
,bash
和zsh
,所以,没有明显的原因(我没有安装新版本的clang,或者改变了任何编译器配置),clang
突然assert.h
在我的Mac上找不到.
在我的开发虚拟机中,运行Ubuntu,gcc
并将clang
项目编译得很好; 在主机Mac OS X上,gcc
仍然编译好,但clang
吐出以下内容:
> make
clang -g -O0 -Wall -Wextra -pedantic -Wshadow -Wstrict-overflow -Wno-missing-field-initializers -std=c99 -m64 -Wno-unused-variable -Wno-unused-parameter -o csim csim.c cachelab.c -lm
csim.c:1:10: fatal error: 'assert.h' file not found
#include <assert.h>
^
1 error generated.
cachelab.c:5:10: fatal error: 'assert.h' file not found
#include <assert.h>
^
1 error generated.
make: *** [csim] Error 1
Run Code Online (Sandbox Code Playgroud)
以下是一些进一步的相关信息:
> xcode-select --print-path
/Applications/Xcode-beta.app/Contents/Developer
> gcc -g -O0 -Wall -Wextra -pedantic …
Run Code Online (Sandbox Code Playgroud) c ×4
macos ×2
unicode ×2
bash ×1
clang ×1
cocoa ×1
dash-shell ×1
encoding ×1
extern ×1
gcc ×1
git ×1
hash ×1
hashtable ×1
javascript ×1
linkage ×1
llvm-clang ×1
objective-c ×1
ocaml ×1
posix ×1
shell ×1
spidermonkey ×1
static ×1
string ×1
travis-ci ×1
v8 ×1