我目前调用clang或gcc为
cc -E -DPREPROCESSING ...
调试宏时。
我发现定义是多余的。是否有一个表达式我可以在源代码中编写,以检测编译器在预处理后何时停止,从而从我的构建脚本中删除此定义?
#if magic
#define PREPROCESSING
#ending
看一下这些文档并不是,但幸运的是我错过了一些东西。
答案 0 :(得分:1)
您提出的任何解决方案都将是特定于编译器的,因为C标准对单独的预处理没有任何说法。
在gcc中,您可以通过添加自定义规范文件来实现魔术:
%rename cpp old_cpp
*cpp:
%{E:-DPREPROCESSING} %(old_cpp)
你需要告诉gcc使用这个spec文件(-specs=/path/to/specfile
),除非你编译自己的gcc,并将上面的定义添加到内置的cpp
规范中。如果您使用的是Makefile,则可以将上面的-specs
选项添加到CFLAGS
。
(我应该补充一点,我认为这不是一个特别好的主意。但它可能。)