Clang C Block: определение функции блока после вызова

Я пытаюсь портировать некоторые вложенные функции GCC, чтобы лязгать. Поскольку вложенная функция gcc не поддерживается в clang, мне нужно вместо этого использовать c-block.

Но я хочу иметь определение блока после обращения к нему. (Мне нужен этот заказ, потому что код генерируется из MACRO, и я не могу организовать этот заказ)

Так в GCC у меня есть этот псевдо-код:

foo(){
  auto void bar (void);
  ...
  bar()
  ...
  void bar(void) {
    ...some stuff
  }
}

Вы, я могу сделать это в функции C-блока 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;
}

не удалось с segfault.

1 ответ

Во втором примере hello не был определен до его вызова, поэтому это неопределенный символ. Вы должны сообщить компилятору, что это такое, прежде чем вы сможете его использовать.

В вашем псевдокоде прототип функции предшествует всему, что обходит ошибку, сообщая компилятору "это будет определено позже".

Другие вопросы по тегам