【问题标题】:Clang C Block : block function definition after callClang C Block : 调用后的块函数定义
【发布时间】:2017-01-02 15:44:56
【问题描述】:

我正在尝试将一些 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;
}

因段错误而失败。

【问题讨论】:

标签: c clang nested-function


【解决方案1】:

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

在您的伪代码中,函数原型先于所有内容,它通过告诉编译器“这将在稍后定义”来绕过错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2023-04-05
    • 1970-01-01
    • 2018-12-05
    • 2018-12-21
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多