gpt4 book ai didi

c - 如果传递了冲突的编译器标志,GCC 会如何表现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:38 25 4
gpt4 key购买 nike

我知道如果你这样执行 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 特别擅长解决这个问题 - 如果它忽略命令行选项,它会产生警告,这可以帮助您解决问题。

关于c - 如果传递了冲突的编译器标志,GCC 会如何表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com