Подтвердить что ты не робот

Как найти мой текущий стандарт компилятора, например, если это C90 и т.д.

Я работаю над машиной Linux. Есть ли какая-либо системная команда для поиска стандарта, за которым следует компилятор C, который я использую?

4b9b3361

Ответ 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.