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

时间:2014-07-23 10:11:53

标签: c++ c gcc g++ syntax-checking

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

1 个答案:

答案 0 :(得分:5)

第一个 以汇编的形式产生输出,因为这是-S的作用;然后你扔掉输出。 (假设写入"nul"在您的平台上意味着什么;我原本希望它写入名为"nul"的文件。)

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