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

Difference between stopping after compiling and checking for syntax only

本文关键字:语法 之间 区别 检查 编译      更新时间:2023-10-16

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

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

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

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

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

我正在使用GCC的Windows端口,它将"null"视为null设备,吃掉所有输出(如/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"的文件。)

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