我不确定该怎么称呼它。但是,这是我第三次在C宏中看到这种现象。
#define sigemptyset(what) (*(what) = 0, 0)
^
eh? why not just ((*what) = 0)
是否有额外的零点?根据我的理解(例如,1,0,0,0),它只会评估为1(第一个条目)。
答案 0 :(得分:4)
逗号运算符产生其右操作数的值,而不是左操作数。
更新:正如评论中@Kninnug指出的那样,sigemptyset
是指定为返回int
的POSIX函数(规范:here })。通过使用(*(what) = 0, 0)
,即使int
属于*(what)
以外的其他类型,它也可以保证宏产生int
(sigemptyset
参数的类型应为sigset_t
1}})。
你的宏定义让我想到两件事:
如果它有 (void *) 0
作为右,
操作数,它可以模仿返回空指针的函数:
#define sigemptyset(what) (*(what) = 0, (void *) 0)
int *p = sigemptyset(q);
如果所有其他sig
函数都应返回指针,则会很有用。
我想到的第二件事是通过在需要时通过0
调用更改printf
来允许调试:
#define sigemptyset(what) (*(what) = 0, printf("sigemptyset\n"))