当我查看 OVS 源代码时,我发现了以前从未见过的非常奇怪的代码。
https://github.com/openvswitch/ovs/blob/master/lib/ovs-rcu.h
void ovsrcu_postpone__(void (*function)(void *aux), void *aux);
#define ovsrcu_postpone(FUNCTION, ARG) \
((void) sizeof((FUNCTION)(ARG), 1), \
(void) sizeof(*(ARG)), \
ovsrcu_postpone__((void (*)(void *))(FUNCTION), ARG))
我通过搜索得到了多参数 sizeof 的含义
为什么用两个参数调用 sizeof 运算符? http://www.vxdev.com/docs/vx55man/diab5.0ppc/c-additi.htm#3001432
如果 FUNCTION 的返回是 int 并且 ARG 的类型是 char,则宏变成这种形式。
((void) 4, (void) 1, ovsrcu_postpone__((void (*)(void *))(function), arg))
在 ovsrcu_postpone__ 方法之前,我无法捕捉到两个参数的作用。