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
не был определен до его вызова, поэтому это неопределенный символ. Вы должны сообщить компилятору, что это такое, прежде чем вы сможете его использовать.
В вашем псевдокоде прототип функции предшествует всему, что обходит ошибку, сообщая компилятору "это будет определено позже".