Как узнать, с каким стандартом ANSI C мой gcc работает по умолчанию? - PullRequest
7 голосов
/ 18 сентября 2011

Я читаю здесь это C90 с расширениями. Как я могу знать наверняка?

Ответы [ 5 ]

7 голосов
/ 18 сентября 2011

Прочтите справочную страницу. На моем компьютере (OSX 10.7, gcc версия 4.2.1 (на основе Apple Inc., сборка 5658) (сборка LLVM 2335.15.00)):

-std =
Определите языковой стандарт. Эта опция в настоящее время поддерживается только
при компиляции C или C ++.

Необходимо указать значение для этой опции; возможные значения

....

gnu89
По умолчанию расширения ISO C90 плюс GNU (включая некоторые функции C99).

....

GNU ++ 98
Так же, как -std = c ++ 98 плюс расширения GNU. Это значение по умолчанию для кода C ++.

5 голосов
/ 28 декабря 2012

Попробуйте команду ниже и найдите std

gcc -v --help | less

Он покажет вам все доступные опции для вашего gcc.

4 голосов
/ 18 сентября 2011

Используйте флаг -std= для указания языкового диалекта: c89, c99, c++98 и т. Д. Обратите внимание, что c90 эквивалентно c89.

В качестве сокращения -ansi вызывает -std=c89 в режиме C и -std=c++98 в режиме C ++.

Используйте -pedantic, чтобы включить всю диагностику, требуемую стандартами.

Значения по умолчанию gnu89 для C и gnu++98 для C ++. Обратитесь к руководству для подробного описания различных диалектов.

0 голосов
/ 05 июля 2016

Ни одна версия gcc по умолчанию полностью не соответствует никаким стандартам ANSI или ISO C. Значение по умолчанию всегда эквивалентно -std=gnuNN, поддерживая данный стандарт с расширениями, специфичными для GNU. До версии 5 (и несколько лет назад) значением по умолчанию было -std=gnu90. Начиная с версии 5, по умолчанию используется -std=gnu11.

Существует три стандарта ISO C: C90, C99 и C11. (C95 был незначительной поправкой к C90.) Первый стандарт ANSI C был опубликован в 1989 году и известен как C89; он описывает тот же язык, что и стандарт ISO C90.

Чтобы узнать версию языка по умолчанию для вашего gcc, введите

 info gcc

поиск фразы "По умолчанию".

Предполагается, что у вас установлена ​​документация gcc, что документация, обозначенная info gcc, соответствует версии gcc, с которой вы работаете, и что формулировка достаточно похожа, что при поиске по умолчанию будет найдена правильная информация , Ничто из этого не гарантировано. Старые руководства по gcc могут быть организованы иначе.

Надежнее, запустите

gcc --version

чтобы узнать, какую версию вы используете, перейдите на страницу онлайн-документации GCC и прочитайте документацию для вашей версии.

Проще говоря, если у вас версия до 5.0, по умолчанию используется -std=gnu89; в противном случае по умолчанию используется -std=gnu11. (Это может измениться в будущем выпуске, но только через некоторое время после того, как новый стандарт ISO C будет опубликован, и сопровождающие gcc уже успели его реализовать и принять решение сделать его по умолчанию. Не останавливайтесь.)

Или вы можете полностью избежать вопроса, указав нужную версию с помощью параметра командной строки -std=....

0 голосов
/ 18 сентября 2011

Вы также можете проверить один из предопределенных макросов , например, запрашивает ли ваш GCC ANSI C ( STRICT__ANSI ) по умолчанию (т. Е. Без аргументов cli).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...