gpt4 book ai didi

c++ - 编译后停止和仅检查语法之间的区别

转载 作者:搜寻专家 更新时间:2023-10-31 00:34:59 25 4
gpt4 key购买 nike

当使用 gcc 或 g++ 时,告诉 GCC 只编译文件而不链接 (-S) 与告诉它不生成输出文件 (-o "nul") 有什么区别:

gcc.exe/g++.exe -S "filename" -o "nul"

...并告诉它只检查语法(-fsyntax-only)?

gcc.exe/g++.exe -c "filename" -fsyntax-only

这两个选项都不会产生输出,只运行编译阶段,并且运行时间大致相同。

我正在使用 GCC 的 Windows 端口,它将“nul”视为吃掉所有输出的空设备(如/dev/null)。

编辑:正如 Mike Seymour 指出的那样,当将 -fsyntax-only 传递给 GCC 时,它不会尝试执行优化,即使它被告知这样做,但 -S 不是这种情况。换句话说,这更慢(我已经进行了测量):

gcc.exe -S "filename" -o "nul" -O3

...比这个:

gcc.exe -c "filename" -fsyntax-only -O3

最佳答案

第一个确实以汇编的形式产生输出,因为那是-S所做的;然后你把输出扔掉。 (假设这就是写入 "nul" 在您的平台上的意思;我本以为它会写入一个名为 "nul" 的文件。)

结果与第二个类似,但做了更多的工作(编译和生成程序集),并没有真正表达检查语法的意图。代码生成和优化过程中的额外静态分析可能会产生额外的警告,这些警告在仅检查语法时会被遗漏。

关于c++ - 编译后停止和仅检查语法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24907677/

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