Компилятор Mac gcc не распознает c11

#gcc

Вопрос:

Я пытаюсь запустить этот простой код

 #include <stdio.h>

 int main(){
     hello();
 }

 void hello(){
     printf("Hello");
 }
 

с помощью

 gcc -std=gnu11  main.c
 

без успеха в Mac. Я получаю

  error: implicit declaration of function 'hello' is invalid in C99 
 

Это моя версия gcc

 % gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c  /4.2.1
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 

Не могли бы вы помочь мне понять, что здесь происходит, пожалуйста?

Ответ №1:

error: implicit declaration of function 'hello' is invalid in C99

Либо объявите, либо определите функцию перед ее вызовом, например

 #include <stdio.h>
 void hello(){
     printf("Hello");
 }

 int main(){
     hello();
 }

 

ПРАВКА: несмотря на диагностику C99 (я никогда не беспокоился, но, может быть, это незначительная ошибка?) Поддержку C11 можно проверить, проверив __STDC_VERSION__ макрос, для которого должно быть установлено значение 201112L .
Это можно проверить вот так:

 #if (__STDC_VERSION__<201112L)
#error C11 support needed
#endif
 

или (если _Static_assert имеется)

 _Static_assert(__STDC_VERSION__>=201112L, "C11 or higher needed");
 

Комментарии:

1. Но я пытаюсь использовать c11 a, а не c99. Если вы видите ошибку, в ней написано «недопустимо в C99».

2. @Juan думайте об этом как о «C99 и далее» 😉 Более серьезно: это просто сообщение, возможно, неправильное, когда дело доходит до того, как оно выглядит точно (хотя и не уверен), но в целом поведение правильное и не указывает на то, что C11 не поддерживается.