哪个 -x 用于通过 GCC 进行预处理?

Which -x to use for preprocessing through GCC?

我需要使用 GCC(在我的例子中是 4.8.1)来 运行 文件上的预处理器,该文件包含预处理器指令,但不(必须)包含 C/C++ 代码。这些指令可以依赖于 GCC 的预定义宏,因此我必须通过 GCC 而不是直接调用预处理器。我知道我可以通过使用 GCC 的选项 -E.

来做到这一点

文件可以有任意扩展名,所以我需要通过 -x 命令行选项指定它的类型。我查看了 GCC 文档并找到了此选项的四个值,这些值在我的情况下可能有意义:

c
c-header
c++
c++-header

除了他们的名字外,文档几乎没有提供关于他们的信息。所以我的问题是:它们之间有什么区别?就我 运行 预处理器的目的而言,它们是等效的,还是有什么我应该警惕的?

-header 变体用于预编译的 header ("PCH") 功能。 PCH 与 -E 结合使用没有实际意义,因此您应该忽略这些。

-x c-x c++ 的选择决定了预处理器的一些特性——C 和 C++ 在这里并不相同。您还可以使用 -std=....

影响预处理器功能

你也可以使用 -traditional 将预处理器置于旧的 K&R 兼容模式(你可能需要 -Wp,-traditional,我忘记了)。这有时会在预处理 non-source 文件时使用,但并非总是如此。此模式影响很多,详见手册