我正在尝试编译stk。在配置过程中出现错误
系统/库/框架/CoreAudio.framework/Headers/AudioHardware.h:162:2: 错误:预期标识符或'('之前的'(')令牌 (^ AudioObjectPropertyListenerBlock)(
当我看到代码时,在here中第162行的函数指针声明中看到^
。我知道我们可以拥有*
,但是^
是什么意思?
代码段:
#if defined(__BLOCKS__)
typedef void
(^AudioObjectPropertyListenerBlock)( UInt32 inNumberAddresses,
const AudioObjectPropertyAddress inAddresses[]);
答案 0 :(得分:0)
正如这里的其他答复者所说,可能是C ++ / CLI。
但是,如果您使用的是macOS(如您在一条注释中所暗示),则这是 Objective-C块 。
它的语法非常奇怪。
该块就像C ++闭包和Java匿名内部类一样,它可以捕获变量。
__block int insider = 0;
void(^block)() = ^{
// print insider here using your favourite method, printf for example
};
这是完整的NSObject
(Objective-C基础类),但是可以调用,这不仅仅是函数指针。
现在,我们转到一个重要的问题,我想在Linux上运行它,怎么做?
LLVM支持块语法,但是您应该参考以下StackOverflow问题以获取更多信息:Clang block in Linux?
因此,您应该在LLVM编译器中编译代码,并使用-fblocks和-lBlocksRuntime。
别忘了安装这些Linux软件包:
llvm 铛 libblocksruntime-dev
如果您已经在macOS上,只需使用-fblocks。