小编Hob*_*ber的帖子

将宏扩展为无代码:“do {} while (0)”或“while (0) {}”

在我的代码中,我使用了一个宏,它应该生成一个日志条目,或者它不应该根据一些编译标志:

#ifdef SOMETHING                                                                
    #define LOG(a)     printf ("%s", a)                                         
#else                                                                           
    #define LOG(a)     while (0) {}                                             
#endif
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好,但是当我查看 Internet 时,我只看到有人在使用

#define LOG(a)     do {} while (0)
Run Code Online (Sandbox Code Playgroud)

代替

#define LOG(a)     while (0) {}
Run Code Online (Sandbox Code Playgroud)

这两种方法等价吗?我应该更喜欢一个吗?

c macros while-loop do-while

2
推荐指数
2
解决办法
78
查看次数

标签 统计

c ×1

do-while ×1

macros ×1

while-loop ×1