c语言 - 编译器标志有什么用?为什么我的代码无法编译?



我在 Ubuntu 中用 C 语言编写了一段代码,用于检查给定输入中的平衡括号。我使用 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++

原因是文件结尾。大写字母 C 被解释为C++文件。解决方案是像这样重命名文件:

mv filename.C filename.c

我的问题是,如果我的代码在我这样做时编译gcc filename.C为什么当我这样做时它不编译gcc -pipe -O2 -std=c11 <filename> -lm

见上文。但在某些情况下,它并不能解决所有问题。虽然 C11 对以前的版本进行了一些扩展,但它不是 100% 向后兼容的。

-std=c11

是正确的选择 但是,您至少需要gcc 4.7或更高才能使用此选项

通过"><文件名>",它们的意思是替换要编译的文件的名称。包含文字字符串"><文件名>"将不起作用。

最新更新