【发布时间】:2018-06-10 20:09:23
【问题描述】:
在libev的ev.h里面,发现了一些看不懂的宏:
173 # define EV_P struct ev_loop *loop /* a loop as sole parameter in a declaration */
174 # define EV_P_ EV_P, /* a loop as first of multiple parameters */
作者将宏EV_P_定义为EV_P,,并将其用作函数定义中的第一个参数,如下所示:
int ev_run (EV_P_ int flags EV_CPP (= 0));
很好奇为什么不直接写EV_P, 而不是EV_P_,这样函数参数用逗号会更清楚:
int ev_run (EV_P, int flags EV_CPP (= 0));
这是 C 中的一个技巧还是有其他原因?对C不熟悉,google了一下,还是没有答案。
【问题讨论】:
-
如果
EV_P_有条件地重新定义为nothing,则手动插入逗号的情况会破坏参数列表。它将扩展为int ev_run(, int flags EV_CPP(=0));,显然无法编译。 -
可能是降低程序可读性的“技巧”。我建议直接编写 Type 而不是以可读性为代价“缩短”代码。