在 C 函数声明中 'params, ...)' 等于 'params...)'?
In C function declaration 'params, ...)' equal to 'params...)'?
全部
在glusterfs的函数中,有如下一个
注意:整个定义在 stack.h
//libglusterfs/src/glusterfs/stack.h
#define STACK_WIND(frame, rfn, obj, fn, params...) \
STACK_WIND_COMMON(frame, rfn, 0, NULL, obj, fn, params)
#define STACK_WIND_COMMON(frame, rfn, has_cookie, cky, obj, fn, params...) \
do { \
... \
next_xl_fn(_new, obj, params); \
THIS = old_THIS; \
} while (0)
我没有google搜索任何关于解释这种声明方法的内容,任何想法都会受到赞赏?
params...
作为 function-like 宏的一部分是 C 标准化省略号作为 function-like 宏参数的一部分之前的 GNU 扩展。
见https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html#Variadic-Macros
如今,更喜欢__VA_ARGS__
。
In C function declaration 'params, ...)' equal to 'params...)'?
不,它们在 function-like 宏中不相等。第一个需要使用 __VA_ARGS__
引用可变参数并使用 __VA_OPT__
或 ##__VA_ARGS__
删除前导逗号。在 params...
中 params
直接被包括逗号在内的所有参数替换。
仅使用省略号 , ...)
并使用 __VA_ARGS__
将等于 , params...)
并使用 params
.
在正常函数中 params...
作为 parameter-list 的一部分是无效的。
全部 在glusterfs的函数中,有如下一个 注意:整个定义在 stack.h
//libglusterfs/src/glusterfs/stack.h
#define STACK_WIND(frame, rfn, obj, fn, params...) \
STACK_WIND_COMMON(frame, rfn, 0, NULL, obj, fn, params)
#define STACK_WIND_COMMON(frame, rfn, has_cookie, cky, obj, fn, params...) \
do { \
... \
next_xl_fn(_new, obj, params); \
THIS = old_THIS; \
} while (0)
我没有google搜索任何关于解释这种声明方法的内容,任何想法都会受到赞赏?
params...
作为 function-like 宏的一部分是 C 标准化省略号作为 function-like 宏参数的一部分之前的 GNU 扩展。
见https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html#Variadic-Macros
如今,更喜欢__VA_ARGS__
。
In C function declaration 'params, ...)' equal to 'params...)'?
不,它们在 function-like 宏中不相等。第一个需要使用 __VA_ARGS__
引用可变参数并使用 __VA_OPT__
或 ##__VA_ARGS__
删除前导逗号。在 params...
中 params
直接被包括逗号在内的所有参数替换。
仅使用省略号 , ...)
并使用 __VA_ARGS__
将等于 , params...)
并使用 params
.
在正常函数中 params...
作为 parameter-list 的一部分是无效的。