Для чего нужны флаги компилятора? Почему мой код не компилируется? - PullRequest
0 голосов
/ 24 сентября 2019

Я написал код на C в Ubuntu, который проверяет наличие сбалансированных скобок в указанном вводе. Я скомпилировал его с помощью компилятора gcc, и я получил правильный вывод. На самом деле это часть онлайн-курса, и они просят меняиспользуйте флаг компилятора

gcc -pipe -O2 -std=c11 filename -lm

Не думаю, что я понимаю, что я должен делать, поэтому я попытался скомпилировать с использованием этого флага, и мой код не компилируется.У меня вопрос, если мой код компилируется, когда я

gcc filename.c

, почему он не компилируется, когда я

gcc -pipe -O2 -std=c11 filename -lm

Я получаю сообщение об ошибке:

cc1plus: warning: command line option ‘-std=c11’ is valid for C/ObjC but not for C++

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

Причина в окончании файла.Заглавная буква C интерпретируется как файл C ++.Решение состоит в том, чтобы просто переименовать файл следующим образом:

mv filename.C filename.c

Мой вопрос заключается в том, если мой код компилируется, когда я выполняю gcc filename.C, почему он не компилируется, когда я делаю gcc -pipe -O2 -std=c11 <filename> -lm* 1007?*

Смотри выше.Но есть некоторые ситуации, когда это не решило бы все.Хотя C11 предоставляет некоторые расширения для предыдущих версий, он не на 100% обратно совместим.

0 голосов
/ 24 сентября 2019

-std=c11 является правильным вариантом, однако вам нужно по крайней мере gcc 4.7 или выше, чтобы иметь этот параметр

0 голосов
/ 24 сентября 2019

Под "" они подразумевают подстановку в имени файла, который вы хотите скомпилировать.Включение буквенной строки "" не сработает.

...