Как вызвать компилятор C под gcc - PullRequest
3 голосов
/ 26 февраля 2010

Согласно моей памяти, следующий фрагмент кода должен хорошо скомпилироваться на C ++, но не на C. Единственная проблема - как это проверить? Он прекрасно скомпилирован с g ++, а также с gcc. Я предполагаю, что g ++ - компилятор C ++, а gcc - компилятор C. Я пробовал это с mingw под Windows. Я прав? если нет, то как скомпилировать его с помощью компилятора C.

int main() {
 const int i = 1;
 const int j = 2;
 const int k = 3;

 int array[i + j + k];
 return 0;
}

Ответы [ 4 ]

11 голосов
/ 26 февраля 2010

Нет, это скомпилируется в C99, который поддерживает массивы переменной длины . Чтобы получить строгое поведение C89, попробуйте скомпилировать с:

gcc -std=c89 -pedantic-errors

Это дает:

error: ISO C90 forbids variable length array ‘array’

c89 означает использование C89, pedantic-errors означает ошибку в коде не-C89.

3 голосов
/ 26 февраля 2010

Это разрешено в последних версиях C, расширения C99 или gcc. Используйте педантичные и стандартные опции, чтобы ограничить принятый синтаксис:

peregrino:$ gcc -pedantic -std=c89 src/maybe_pedantic.c 
src/maybe_pedantic.c: In function ‘main’:
src/maybe_pedantic.c:6: warning: ISO C90 forbids variable length array ‘array’
2 голосов
/ 26 февраля 2010

Параметр для указания языка с gcc: -x

из gcc --help в моей системе:

# -x <language>            Specify the language of the following input files
#                          Permissible languages include: c c++ assembler none
#                          'none' means revert to the default behavior of
#                          guessing the language based on the file's extension

Тем не менее, ваш код является действительным кодом C.

0 голосов
/ 26 февраля 2010

Компилируется в C ++ и C99 (но не в C89)

Отлично скомпилировано с g ++, а также с gcc

GCC поддерживает C99

если нет, то как его скомпилировать с помощью компилятора C?

Возможное расширение файла с *.cpp до *.c.

...