gpt4 book ai didi

c++ - 在C中如何在命令行中定义所有未知宏(在源文件/头文件中使用)

转载 作者:行者123 更新时间:2023-11-30 18:41:26 26 4
gpt4 key购买 nike

我的要求是递归地获取头文件中包含的所有头文件的列表,我正在使用,作为 stdio.h 上的示例

$ gcc -H stdio.h

这适合我,正如你所知,有 #define 可以有条件地包含一些基于 Macors 的其他头文件,现在我希望这样的 #define 在命令行中传递,例如

$ gcc -D* -H stdio.h

它自动定义头文件中使用的所有宏。我尝试过,但没有成功,任何想法,谢谢

最佳答案

这是不可能的,并且定义特定头文件使用的所有宏也没有任何意义。其中一些很可能是相互排斥的。

举例来说,您有:

 #if ARCH_X86
... stuff goes here for x86...
#endif
#if ARCH_ARM
.... stuff goes here for ARM ...
#endif

原作者当然不希望您在同时启用 ARM 和 X86 的情况下编译它,因为这种组合根本没有任何意义。

即使您要定义所有定义,您也不会明白第二部分:

#if ARCH_X86
#include <x86_stuff.h>
#else
#include <arm_stuff.h>
#endif

如果您的项目有特殊定义,请使用它们。但所有的定义都没有任何意义。

另一个问题是您可能会找到与系统相关的文件以及与这些文件相关的定义,例如:

#ifdef WINDOWS
#include <windows.h>
#elsif LINUX
#include <linux.h>
#else
#error "Must be either Linux or Windows".
#endif

#if WINDOWS_THINGY_BOB
... do stuff here ...
#endif

(假设WINDOWS_THINGY_BOB是包含windows.h的定义集)

另一个潜在的问题是,并非所有内容都是“#ifdef”,而是类似这样的内容:

#if DEBUG==2
#include <debug_lots.h>
#elsif DEBUG != 1
#include <debug_little.h>
#else
#include <no_debug.h>
#endif

如果您真的想看到“如果定义了 X,则包含它”,您必须编写自己的代码来遵循具有不同定义的不同路径,包括“未设置”。

我可以看到,如果您没有一套明确的“我正在编译的环境是什么”,这很快就会变得非常复杂。

关于c++ - 在C中如何在命令行中定义所有未知宏(在源文件/头文件中使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com