【发布时间】:2018-06-18 18:35:29
【问题描述】:
我正在尝试编写一个采用可变参数的函数。它有以下原型:
void foo(const char *name, const char *file, uint32_t line, const char *fmt, ...);
我用以下宏调用它:
#define FOO(name, ...) \
foo(name, __FILE__, __LINE__, __VA_ARGS__);
据我了解,以下内容将是有效的:
FOO("Example, "Hello %s", "Stack Overflow");
但是在符合标准的 c99 编译器中,以下会导致未定义的行为吗?
FOO("Example", "Hello Stack Overflow");
我担心的是,因为 foo 期望 *fmt 和 ... 在只有两个参数传递给宏时会添加尾随 ,。
谁能告诉我上面的c99是否有效?
编辑:当我使用 gcc 和 std=c99 运行它时,它可以工作,但我担心会有静音 UB
谢谢!
【问题讨论】:
标签: c c-preprocessor variadic-functions variadic-macros