当前位置: 首页 > 面试题库 >

如果传递冲突的编译器标志,GCC的行为如何?

步博艺
2023-03-14
问题内容

我知道如果您这样执行GCC:

gcc -O3 -O2 foo.c

GCC将使用最后一次传递的优化标志(在本例中为O2)。但是,对所有标志都是这样吗?例如,如果我像这样执行GCC:

gcc -mno-sse -msse bar.c

它会支持SSE,因为那是传递的最后一个标志,还是会导致未定义的行为?我的初步实验似乎表明它将支持SSE,但是我不确定在所有情况下是否都适用。


问题答案:

正如您在第一个示例中提到的那样,通常情况下,行上的更高选项会覆盖先前传递的选项。我个人没有遇到过任何不同的行为-m-f标志,但是我不知道文档中的特定参考。

请注意,某些选项的行为不这样:

$ gcc example.c -DABC -DABC=12
<command-line>: warning: "ABC" redefined
<command-line>: warning: this is the location of the previous definition

因此,-UABC在两者之间必须存在一个中间位置以关闭该警告。

clang顺便说一句,它特别擅长解决此问题-如果忽略命令行选项,它将发出警告,这可以为您提供帮助。



 类似资料:
  • 问题内容: 我了解setup.py使用与构建python相同的CFLAGS。我有一个单独的C扩展名是segfaulting。我不需要构建它 , 因为正在优化一些值和代码,以使核心文件不足以解决问题。 我只需要修改setup.py,以便不使用它。 我读过的distutils文件,尤其是和,看看如何添加标记和库,包括,但不知道如何修改默认的gcc标志。 具体来说,这是针对Python 2.5.1上的旧

  • 我已经在conda环境中使用这个安装了protobuf。因此,一旦我想安装一个软件,它就会显示以下错误消息: 我试图找出已经安装了哪些版本的协议 通过此命令卸载protobuf后,即使在删除编译器后,conda uninstall protobuf: 如何卸载这个libprotoc 3.4.0?即使通过这个命令删除并成功删除,它仍然显示protoc版本为。有人能帮忙吗?我只需要。谢谢

  • 问题内容: 我正在用C语言编写一个Python扩展,它需要CoreFoundation框架(除其他外)。可以使用以下命令进行编译: (“ -framework”是仅适用于Apple的gcc扩展,但这没关系,因为无论如何我都在使用它们的特定框架) 我如何告诉setup.py将此标志传递给gcc? 我尝试了这个,但是它似乎不起作用(它可以编译,但是当我尝试运行它时会抱怨未定义的符号): 编辑: 这似乎

  • gcc 是 GNU 推出的功能强大、性能优越的多平台编译器,是 GNU 的代表作品之一。它能将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件,如果没有给出可执行文件的名字,gcc 将生成一个名为 a.out 的文件。 gcc 通过后缀来区分输入文件的类型: 后缀 类型 .c C语言源代码文件 .a 由目标文件构成的档案库文件 .C|.cc|.cxx C++源代码文件 .h 程

  • 在令牌冲突的情况下,如何定义ANTLR lexer行为?让我解释一下“冲突”标记的含义。例如,假设定义了以下内容: 这里有一个冲突,因为在读取一系列数字后,lexer将不知道是有一个INT还是多个INT\u阶段标记(或两者的不同组合)。测试之后,如果INT是在INT\u阶段之后定义的,那么lexer会更喜欢查找INT\u阶段,但可能不是INT?否则,将找不到INT\u阶段。 另一个例子是: 我被告