当使用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
答案 0 :(得分:5)
第一个 以汇编的形式产生输出,因为这是-S
的作用;然后你扔掉输出。 (假设写入"nul"
在您的平台上意味着什么;我原本希望它写入名为"nul"
的文件。)
结果类似于第二个,但是更多的工作(编译和生成程序集),并没有真正表达检查语法的意图。代码生成和优化期间的额外静态分析可能会产生额外的警告,仅在检查语法时会遗漏。