Я работаю над машиной Linux. Есть ли какая-либо системная команда для поиска стандарта, за которым следует компилятор C, который я использую?
Как найти мой текущий стандарт компилятора, например, если это C90 и т.д.
Ответ 1
Это зависит от компилятора, я предполагаю, что вы используете GCC. Вы можете проверить макросы, определенные вашим компилятором, используя:
gcc -dM -E - < /dev/null
Обратитесь к руководству о флажках, в частности:
__ STDC_VERSION __
Этот макрос расширяется до уровня C Standard номер версии, длинное целое число константа вида yyyymmL, где yyyy и mm - год и месяц Стандартная версия. Это означает какая версия стандарта C компилятор соответствует. Как STDC, это не обязательно верно для вся реализация, если только GNU CPP используется с GCC.
Значение 199409L означает 1989 C с поправками, внесенными в 1994 году текущее значение по умолчанию; значение 199901L означает пересмотр в 1999 году стандарт. Поддержка в 1999 году ревизия еще не завершена.
Этот макрос не определен, если используется опция -traditional-cpp, а также при компиляции С++ или Objective-C.
В этот сайт вы можете найти много информации об этом. См. Таблицу здесь.
Ответ 2
Вы также можете проверить это в своем коде с помощью стандартных макросов, например (из этой ссылки):
#if defined(__STDC__)
# define PREDEF_STANDARD_C_1989
# if defined(__STDC_VERSION__)
# define PREDEF_STANDARD_C_1990
# if (__STDC_VERSION__ >= 199409L)
# define PREDEF_STANDARD_C_1994
# endif
# if (__STDC_VERSION__ >= 199901L)
# define PREDEF_STANDARD_C_1999
# endif
# endif
#endif
Если вы хотите проверить это из командной строки, вы можете выбрать один (например, c89) и проверить возвращаемое значение из минимальной программы:
echo -e "#ifdef __STDC__\n#error\n#endif"|gcc -xc -c - > /dev/null 2>&1; test $? -eq 0 || echo "c89
Ответ 3
Во время компиляции проверьте макрос препроцессора:
-
__ANSI__
-
__STDC__
-
__STDC_VERSION__
>= 199901L для c99
Ответ 4
У вас, вероятно, есть gcc, и в этом случае вы можете указать стандарт во время компиляции, например.
$ gcc -Wall -std=c89 foo.c -o foo
или
$ gcc -Wall -std=c99 foo.c -o foo
Тип:
$ man gcc
для полной информации.
Ответ 5
Если ваш компилятор C - gcc, вы можете использовать опцию -std
, чтобы указать, какой стандарт C следует соблюдать. По умолчанию используется gnu89. Нет никакой общей системной команды для определения стандарта для любого данного компилятора. Вам нужно будет проверить документацию.
Ответ 6
В дополнение к приведенным выше ответам. Если вы хотите проверить, находитесь ли вы на C99. Просто определите структуру и инициализируйте ее как:
struct Tree{
struct Node *root;
struct Node NIL_t;
struct Node * const NIL;
}
struct Tree t = { .root = NULL, .NIL = &t.NIL_t }; //init.
Это работает только на C99. Если это не так, значит вы не используете C99.