Пока я вижу исходный код 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
Если возвращение функции является INT и типа ARG является символом, макро становится этой формой ,
((void) 4, (void) 1, ovsrcu_postpone__((void (*)(void *))(function), arg))
Я не могу уловить роли двух аргументов до метода ovsrcu_postpone__.
Это похоже на способ проверить совместимость типов 'FUNCTION' и' ARG' перед тем, как отбросить их типы (используя их в неоцениваемом выражении 'sizeof', которое ничего не делает во время выполнения, но которое должно пройти typechecker). Это своего рода «общее программирование». – Mankarse