哪个 -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 文件时使用,但并非总是如此。此模式影响很多,详见手册
我需要使用 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 文件时使用,但并非总是如此。此模式影响很多,详见手册