为什么有人用未使用的参数/参数定义C宏?

Joh*_*Doh 3 c macros

我正在浏览一些代码,我遇到了这个宏定义

#define D(x) do { } while (0)
Run Code Online (Sandbox Code Playgroud)

它在像这样的代码中使用,

D(("couldn't identify user %s", user));
Run Code Online (Sandbox Code Playgroud)

我运行代码,并且该特定行没有做任何事情.那么,为什么有人会定义这样的宏呢?

如果您想知道,该宏是在_pam_macros.h头文件中定义的.

Mic*_*zek 8

最有可能D是用于调试,并且在#ifdef其他地方可以使其在启用调试时执行更有用的操作,例如输出消息或将其记录到文件中.该do/while循环是使其需要在后面加上一个分号,因此用户可以调用它D(...);,而不是只D(...)(见这篇文章)