小编ELL*_*BLE的帖子

将函数指针传递给静态函数是否可能/安全/合理?

假设我只想通过传递一个函数指向该函数来从我的一个文件中公开一个函数.声明该函数是否安全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 static function-pointers extern linkage

10
推荐指数
1
解决办法
1553
查看次数

我在哪里可以开始使用C语言中的Unicode友好编程?

所以,我正在研究一个普通的C(ANSI 9899:1999)项目,我正在试图弄清楚从哪里开始:Unicode,UTF-8和所有爵士乐.

具体来说,它是一个语言解释器项目,我有两个主要的地方,我需要处理Unicode:读取源文件(表面上支持Unicode标识符的语言等),以及'字符串'对象.

我熟悉所有关于Unicode,UTF-7/8/16/32和UCS-2/4的明显基础知识,等等......我主要是寻找有用的,特定于C的(也就是说,请没有C++或C#,这就是之前在SO上记录的所有资源)关于实现Unicode友好的东西的"后续步骤"的资源......在C.

任何链接,联机帮助页,维基百科文章,示例代码都非常受欢迎.我还将尝试在原始问题中维护此类资源的列表,以供稍后发生的任何人使用.


c string unicode encoding unicode-string

8
推荐指数
1
解决办法
824
查看次数

分析目标并选择一个好的哈希函数

这不是具体解决方案的具体问题; 但它反而是对我无法找到关于如何为哈希表和类似任务选择好的哈希函数的任何好的Stack Overflow问题的回应.

所以!让我们来谈谈哈希函数,以及如何选择哈希函数.如果编程菜鸟需要为他们的特定任务选择一个好的哈希函数,那么选择一个呢?简单快速的Fowler-Noll-Vo什么时候适合?他们什么时候应该在MurmurHash3中供应?在比较各种选项时,您是否有良好的资源链接?

hash hashtable

8
推荐指数
1
解决办法
3345
查看次数

OCaml如何在运行时表示惰性值?

这一在现实世界中OCaml中描述了不同数据类型的运行时内存布局。但是,没有关于惰性值的讨论。

  • 如何lazy_t实现,即它的运行时表示形式是什么以及编译器内置的主要操作是什么?链接到源代码将不胜感激。我查看了CamlinternalLazy模块,但是仅基于对Obj模块中函数的调用,似乎很难解读实际的表示形式。
  • 有人可以提供对表示/操作所做的更改的摘要,以使其对于OCaml多核项目而言是线程安全的吗?这个提交似乎是实现的提交,但是对于我来说,作为局外人来说似乎有点不透明。

注意:此问题 OCaml编译器/运行时有关。据我所知,有如何偷懒值应该由没有实施标准规范 ocaml的编译器/运行。

ocaml lazy-evaluation memory-layout data-representation

8
推荐指数
1
解决办法
178
查看次数

通过--tags获取git ref时,“ up-pack:不是我们的ref”是什么意思?

在我的一个项目中,一旦我的构建脚本尝试使用以下命令获取所有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)

git git-submodules travis-ci

8
推荐指数
2
解决办法
151
查看次数

如何禁用 VS Code“扩展开发主机”中的所有无关扩展而不覆盖我的正常用户配置?

我正在尝试在 VSCode 扩展上进行调试/开发。为此,我需要在调试“扩展开发主机”中禁用所有(许多)其他扩展。

\n

但是,这样做会保存到我的用户首选项,然后导致 \xe2\x80\xa6 我的所有其他 VScode 实例 \xe2\x80\xa6 停止具有任何扩展名。

\n

如何在“扩展开发主机”中禁用我的其他日常扩展而不破坏我的正常用户配置?有没有办法说服 EDH 重复可靠地使用不同的设置文件或配置路径或其他东西?

\n

configuration-files visual-studio-code vscode-extensions

7
推荐指数
1
解决办法
6405
查看次数

@在Objective-C 2.0中合成一个C数组结构

我正在尝试在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数组.具体来说,这是我到目前为止:

PlayerState.h

#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)

c macos cocoa objective-c

6
推荐指数
1
解决办法
2万
查看次数

迷惑JavaScript`var`关键字的操作

我对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; 那么为什么它会以非常实质的方式影响这项任务呢?

javascript v8 spidermonkey

6
推荐指数
1
解决办法
2114
查看次数

在POSIX shell脚本中嵌入Unicode字符的最佳方法是什么?

有几种特定于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脚本的最佳方法是:

  1. 工程在dash,bashzsh,
  2. 显示代码中代码点的十六进制编码,
  3. 不依赖于字符串的特定编码(即不通过八进制编码UTF-8字节)
  4. 最后,不需要调用任何"重型"解释器.(比方说,运行时间不到0.01秒.)

unicode bash shell posix dash-shell

6
推荐指数
1
解决办法
2400
查看次数

Homebrew安装的Clang无法在Mac OS X上找到标题

所以,没有明显的原因(我没有安装新版本的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 macos gcc clang llvm-clang

6
推荐指数
0
解决办法
1334
查看次数