gpt4 book ai didi

c - 如何编写扩展为 `#ifdef... #endif` 宏 block 的 C 宏?

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:11 29 4
gpt4 key购买 nike

我想将一些调试输出语句插入到大型 C 代码库中。这些调试输出语句将由编译器选项开关控制。

调试输出语句如下所示:

#ifdef DEBUG_FLAG
Print(someSymbol)
#endif

为了节省一些输入,我想知道是否可以定义一个简单的宏来扩展到上面的调试输出语句 block ?

例如:

#define DBG_MACRO(someSymbol)  (something that can expand to above)

最佳答案

您不能将预处理器指令放在预处理器宏中。

但是,没有什么能阻止您定义一个扩展为无的宏:

#ifdef DEBUG_FLAG
# define Print(x) Print(x)
#else
# define Print(x)
#endif

// Expands to an empty statement if DEBUG_FLAG were not set and
// to a call to Print(something) if DEBUG_FLAG were set.
Print(something);

以上取决于 Print 是一个已经声明/定义的函数。如果宏定义时设置了 DEBUG_FLAG,则宏会被自身“替换”,但 C 预处理器扩展不是递归的,因此扩展只发生一次,导致调用 Print.

关于c - 如何编写扩展为 `#ifdef... #endif` 宏 block 的 C 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38710957/

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