Clang C Block:调用后的块函数定义

时间:2017-01-02 15:44:56

标签: c clang nested-function

我试图将一些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;
}

失败了一个段错误。

1 个答案:

答案 0 :(得分:0)

在您的第二个示例中,在您调用之前尚未定义hello,因此它是未定义的符号。在使用之前,您必须告诉编译器 是什么。

在你的伪代码中,函数原型先于所有东西,它通过告诉编译器来解决错误,并且这将在稍后定义。"