GCC 预处理器

发布于 2024-09-27 19:22:55 字数 420 浏览 2 评论 0原文

可能的重复:
运行 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

淡淡绿茶香 2024-10-04 19:22:55

使用gcc -E 仅运行预处理器部分,例如,给定一个文件 in.c

#if 0
0;
#endif

#if 1
1;
#endif

运行

gcc -E in.c -o in.i

会生成一个文件 in.i

# 1 "in.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "in.cpp"





1;

即, #if 0 后面的部分已被删除。如果您有#include 文件,它们也会被粘贴,所以我不确定这有多大帮助。

Use gcc -E to only run the preprocessor part, e.g., given a file, in.c,

#if 0
0;
#endif

#if 1
1;
#endif

running

gcc -E in.c -o in.i

yields a file, in.i:

# 1 "in.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "in.cpp"





1;

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.

旧瑾黎汐 2024-10-04 19:22:55

听起来你实际上想要 unifdef,而不是 GCC 预处理器。

It sounds like you actually want unifdef, not the GCC preprocessor.

北凤男飞 2024-10-04 19:22:55

是的 - 几乎可以肯定,您的编译器在环境中提供了某些默认定义,您可以使用它们来打开和关闭不同系统的代码。 __GNUC__ 对于 GCC 来说是一个很好的选择。例如:

#ifdef __GNUC__
#define SOME_VALUE 12
#else
#define SOME_VALUE 14
#endif

如果您使用 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:

#ifdef __GNUC__
#define SOME_VALUE 12
#else
#define SOME_VALUE 14
#endif

If you compile that block with GCC, SOME_VALUE will be 12, and if you compile with MSVC, for example, SOME_VALUE will be 14. A list of platform specific definitions is available at this question.

香橙ぽ 2024-10-04 19:22:55

您可能可以使用:

gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E 

通过switch,您知道#define将是未定义的。

You probably can use:

gcc -CC -P -Uswitch -undef -nostdinc -fdirectives-only -dDI -E 

With switch the #define you know will be undefined.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文