【发布时间】:2015-03-19 13:05:05
【问题描述】:
在查看 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的含义
Why call sizeof operator with two arguments? 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__ 方法之前,我无法捕捉到两个参数的作用。
【问题讨论】:
-
这看起来像是一种在抛弃类型之前检查
FUNCTION和ARG类型兼容性的方法(通过在未评估的表达式sizeof中使用它们,这在运行时什么都不做,但必须通过类型检查器)。一种“通用编程”。
标签: c++ c openvswitch