Как получить текущий диалект c в gcc?

Новичок в программировании на C.
В gcc -std устанавливает стандарт C, который компилируется, например. gcc -std=c99.
Можно ли узнать, какой стандарт C установлен в настоящее время?


person Salvador    schedule 08.04.2014    source источник
comment
stackoverflow.com/questions/14737104/   -  person ooga    schedule 09.04.2014
comment
@ooga Вы правы, это точно такой же вопрос. Однако во всех ответах я нахожу, как установить стандарт C, а не как его получить.   -  person Salvador    schedule 09.04.2014


Ответы (2)


Вы можете использовать эту программу для печати по умолчанию:

#include <stdio.h>

int main() {
#ifdef __STRICT_ANSI__
    printf("c");
#else
    printf("gnu");
#endif

#ifdef __STDC_VERSION__
  #if __STDC_VERSION__ == 199901L
    puts("99");
  #elif __STDC_VERSION__ == 201112L
    puts("11");
  #else
    puts("(unknown)");
  #endif
#else
  puts("90");
#endif
  return 0;
}
person ooga    schedule 09.04.2014

Существуют различные символы препроцессора, которые определены в различных режимах. Вы можете использовать gcc -E -dM -x c /dev/null для получения дампа всех предопределенных символов препроцессора.

В режиме C99 (-std=c99 или -std=gnu99) символ __STDC_VERSION__ определяется как 199901L. В режиме C11 (с -std=c11 или std=gnu11) это 201112L

В строгом режиме C (-std=cXX вместо -std=gnuXX) символ __STRICT_ANSI__ определяется как 1.

person Chris Dodd    schedule 08.04.2014
comment
gcc -E -dM выдает gcc: фатальная ошибка: нет входных файлов. компиляция завершена. как в Ubuntu, так и в Windows. - person Salvador; 09.04.2014
comment
@Salvador: ну да, вам нужно предоставить драйверу компилятора хотя бы один входной файл, чтобы он знал, на каком языке компилировать. Вы можете дать ему любой существующий файл или создать пустой с расширением .c или .cpp. - person Chris Dodd; 10.04.2014
comment
Извините, но новичкам нужен готовый код как echo | cpp -dM, который выводит те же предопределенные настройки препроцессора (и не требует файла для компиляции). - person Salvador; 16.04.2014