检测何时仅进行预处理,即gcc -E

时间:2016-07-24 22:15:16

标签: gcc clang c-preprocessor

我目前调用clang或gcc为

cc -E -DPREPROCESSING ...

调试宏时。

我发现定义是多余的。是否有一个表达式我可以在源代码中编写,以检测编译器在预处理后何时停止,从而从我的构建脚本中删除此定义?

#if magic
#define PREPROCESSING
#ending

看一下这些文档并不是,但幸运的是我错过了一些东西。

1 个答案:

答案 0 :(得分:1)

您提出的任何解决方案都将是特定于编译器的,因为C标准对单独的预处理没有任何说法。

在gcc中,您可以通过添加自定义规范文件来实现魔术:

%rename cpp old_cpp
*cpp:
%{E:-DPREPROCESSING} %(old_cpp)

你需要告诉gcc使用这个spec文件(-specs=/path/to/specfile),除非你编译自己的gcc,并将上面的定义添加到内置的cpp规范中。如果您使用的是Makefile,则可以将上面的-specs选项添加到CFLAGS

(我应该补充一点,我认为这不是一个特别好的主意。但它可能。)