我需要使用GCC(在我的情况下为4.8.1)在包含预处理程序指令的文件上运行预处理程序,而不是(必然)C / C ++代码。这些指令可能依赖于GCC的预定义宏,因此我必须通过GCC而不是直接调用预处理器。我知道我可以通过使用GCC的选项-E
来做到这一点。
该文件可以具有任意扩展名,因此我需要通过-x
命令行选项指定其类型。我查看了GCC文档并找到了这个选项的四个值,这在我的情况下是有意义的:
c
c-header
c++
c++-header
除了名字外,文档提供的信息很少。所以我的问题是:它们之间有什么区别?它们是否仅仅用于运行预处理器的目的,还是我应该警惕的东西?
答案 0 :(得分:1)
-header
变体用于预编译标头(" PCH")功能。与-E
一起使用PCH并不合理,所以你应该忽略它们。
-x c
与-x c++
的选择决定了预处理器的一些功能--C和C ++在这里并不相同。您还可以使用-std=...
来影响预处理器功能。
您还可以将预处理器与-traditional
放在旧的K& R兼容模式中(您可能需要-Wp,-traditional
,我忘了)。这有时在预处理非源文件时使用,但并非总是如此。此模式会影响很多内容,有关详细信息,请参阅手册。