當我看到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