当我看到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))
我通过搜索
Why call sizeof operator with two arguments? http://www.vxdev.com/docs/vx55man/diab5.0ppc/c-additi.htm#3001432
IF函数的返回是int和ARG的类型为char了多参数的含义的sizeof,宏观变成这种形式。
((void) 4, (void) 1, ovsrcu_postpone__((void (*)(void *))(function), arg))
我无法在ovsrcu_postpone__方法之前捕捉到两个参数的角色。
它看起来像一种方法来检查'FUNCTION'和'ARG'类型的兼容性,然后丢弃它们的类型(通过在未评估的表达式'sizeof'中使用它们,它在运行时不做任何事情,但必须通过typechecker)。一种“通用编程”。 – Mankarse 2015-03-19 13:10:22