gpt4 book ai didi

c - 适当的 C 预处理器宏空操作

转载 作者:太空狗 更新时间:2023-10-29 17:07:20 26 4
gpt4 key购买 nike

对于调试日志记录,我经常看到并使用类似的东西

#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif

但是在很多地方,我看到第二个#define被替换成了

#define DLOG(fmt, args...) do {} while (0)

特别是,有 this answer ,以及关于 this other answer 的评论对同一个问题表明问题会出现在这样的情况下

if (condition)
DLOG("foo");

尽管我的快速测试表明,行中生成的分号本身将用作条件语句中的无操作语句。

nothingdo {} while (0) 哪个更好?如果是这样,为什么?还有其他更好的东西吗?

最佳答案

分号本身有两个缺点:

  • 你的宏的用户可以不用分号编写它,编译器也不会报错,并且
  • 一些编译器可能会发出关于可能存在分号的警告。

do {} while (0) 技巧解决了这两个问题:

DLOG("foo") // No semicolon

将触发错误,并且编译器不会警告您“杂散”分号。

关于c - 适当的 C 预处理器宏空操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549193/

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