我试图将一些GCC嵌套函数移植到clang。由于clang不支持gcc嵌套函数,我需要使用c-block代替。
但是我希望在调用之后获得块定义。 (我需要这个订单,因为代码是从MACRO生成的,我不能安排这个订单)
所以在gcc中我有这个伪代码:
foo(){
auto void bar (void);
...
bar()
...
void bar(void) {
...some stuff
}
}
你能用C-block clang函数做到这一点吗?
此代码可以正常使用
int main() {
void (^hello)(void);
hello = ^(void){
printf("Hello, block!\n");
};
hello();
return 0;
}
但是以下代码
int main() {
void (^hello)(void);
hello();
hello = ^(void){
printf("Hello, block!\n");
};
return 0;
}
失败了一个段错误。
答案 0 :(得分:0)
在您的第二个示例中,在您调用之前尚未定义hello
,因此它是未定义的符号。在使用之前,您必须告诉编译器 是什么。
在你的伪代码中,函数原型先于所有东西,它通过告诉编译器来解决错误,并且这将在稍后定义。"