【问题标题】:What are compiler flags for?Why won't my code compile?什么是编译器标志?为什么我的代码不能编译?
【发布时间】:2019-09-24 16:46:23
【问题描述】:

我在 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++

【问题讨论】:

  • 你是在gcc前面写flag吗?去掉它。这是完全错误的。
  • 我做错了。
  • 好吧,如果没有代码和错误消息,就无法说明为什么您的代码无法编译。
  • 尝试删除<>。我想这只是意味着“在此处插入您自己的文件名”。 IE。将<filename> 替换为filename.C
  • 请不要在得到答案后更改您的问题。这使旧答案无效。如果您有新问题,请发布一个新问题,但在您的代码有效之前,不要反复更改您的问题。

标签: c ubuntu compilation


【解决方案1】:

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

mv filename.C filename.c

我的问题是我的代码在我执行gcc filename.C 时是否可以编译,为什么在我执行gcc -pipe -O2 -std=c11 <filename> -lm 时它没有编译

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

【讨论】:

  • 是的,我改了。
  • 我修好了。谢谢。
【解决方案2】:

-std=c11 是一个正确的选项 但是您至少需要gcc 4.7 或更高版本才能拥有此选项

【讨论】:

    【解决方案3】:

    ”表示替换为您要编译的文件的名称。包含文字字符串“”将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2017-01-11
      相关资源
      最近更新 更多