gpt4 book ai didi

c - 跨多个文件的#ifdef 问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:52:56 25 4
gpt4 key购买 nike

util.h 包含以下代码:

#ifdef DEBUG
#define LOGGER() MACRO_WRAP(printf("Entering %s\n", __func__))
#else
#define LOGGER() MACRO_WRAP()
#endif

foo.c 包含这段代码:

void foo_start(foo *m)
{
LOGGER();

do_action(m, START);
}

然后 foo_unit_tests.c 包含对 foo_start() 的调用。我希望能够在相关文件的顶部进行 #define DEBUG —— 即我希望它在单元测试中打开,但在主代码中不打开。

我无法让它工作。将 #define DEBUG 放在 foo_unit_tests.c 的顶部不会产生所需的行为。我让它工作的唯一方法是将 #define DEBUG 放在 util.hfoo.c 的顶部,两者其中比我想要的要困惑得多。

我在这里错过了什么?我认为 .c 文件中定义的宏在它包含的所有 .h 文件中都是可见的。

最佳答案

您必须在所有需要定义该宏的文件的开头包含 #define,或者通过包含包含它的 .h 文件。

如果您想要一种更简洁的方法,那么最好使用编译器标志来设置环境变量。

例如

icpc -DDEBUG=whatever source.c ...

或者更好的是,您可以通过 makefile 中的环境变量启用此编译器标志。

关于c - 跨多个文件的#ifdef 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20293819/

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