GCC 预处理器
可能的重复:
运行 GCC 预处理器
是否有 GCC选项使GCC预处理器生成C源代码但过滤掉不相关的源代码?
例如,C 文件具有 #define switch
来定义许多不同的平台。我只对一个平台感兴趣,因此我希望 C 预处理器过滤掉不相关的代码。海湾合作委员会支持吗?
Possible Duplicate:
Running the GCC preprocessor
Is there a GCC option to make the GCC preprocessor generate C source code but filter out irrelevant source code?
For example, a C file has #define switch
to define for many different platforms. I'm only intersted in one platform, so I want the C preprocessor to filter out unrelated code. Does GCC support this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
gcc
-E
仅运行预处理器部分,例如,给定一个文件 in.c,运行
会生成一个文件 in.i:
即,
#if 0
后面的部分已被删除。如果您有#include 文件,它们也会被粘贴,所以我不确定这有多大帮助。Use
gcc
-E
to only run the preprocessor part, e.g., given a file, in.c,running
yields a file, in.i:
I.e., the parts behind the
#if 0
got removed. If you would have#include
'd files, they would have been pasted too though, so I am not sure how much help this is.听起来你实际上想要 unifdef,而不是 GCC 预处理器。
It sounds like you actually want unifdef, not the GCC preprocessor.
是的 - 几乎可以肯定,您的编译器在环境中提供了某些默认定义,您可以使用它们来打开和关闭不同系统的代码。
__GNUC__
对于 GCC 来说是一个很好的选择。例如:如果您使用 GCC 编译该块,
SOME_VALUE
将是12
,如果您使用 MSVC 编译,SOME_VALUE
将是14. 平台特定定义的列表可在 此获取问题。Yes - almost certainly your compiler provides certain default definitions in the environment that you can use to turn code on and off for different systems.
__GNUC__
is a good one for GCC. For example:If you compile that block with GCC,
SOME_VALUE
will be12
, and if you compile with MSVC, for example,SOME_VALUE
will be 14. A list of platform specific definitions is available at this question.您可能可以使用:
通过
switch
,您知道#define
将是未定义的。You probably can use:
With
switch
the#define
you know will be undefined.