gpt4 book ai didi

c - C 中是否允许空的宏定义?他们的行为如何?

转载 作者:太空狗 更新时间:2023-10-29 16:20:15 24 4
gpt4 key购买 nike

假设“空”宏定义

#define FOO

它是有效的标准 C 吗?如果是这样,这个定义之后的 FOO 是什么?

最佳答案

它只是一个扩展为什么都没有的宏。但是,既然已经定义了宏,您可以使用 #if defined(或 #ifdef)检查它是否已定义。

#define FOO

int main(){
FOO FOO FOO
printf("Hello world");
}

将扩展为

int main(){

printf("Hello world");
}

在某些情况下这会非常方便,例如您不想在发布版本中显示的附加调试信息:

/* Defined only during debug compilations: */
#define CONFIG_USE_DEBUG_MESSAGES

#ifdef CONFIG_USE_DEBUG_MESSAGES
#define DEBUG_MSG(x) print(x)
#else
#define DEBUG_MSG(x) do {} while(0)
#endif

int main(){
DEBUG_MSG("Entering main");
/* ... */
}

由于定义了宏CONFIG_USE_DEBUG_MESSAGESDEBUG_MSG(x) 将扩展为print(x),您将得到输入主。如果您删除 #defineDEBUG_MSG(x) 将扩展为一个空的 do-while 循环,您将获胜'查看消息。

关于c - C 中是否允许空的宏定义?他们的行为如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892191/

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