2

使用 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
4

1 回答 1

5

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

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

于 2014-07-23T10:22:19.210 回答