使用可变参数进行格式化

ant*_*009 0 c variadic

c89 gcc 4.7.4

你好,

我只是试验这些宏:

#define LOG_INFO_1(fmt, ...) printf(fmt, __VA_ARGS__)
#define LOG_INFO_2(...) printf(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

并使用这样:

LOG_INFO_1("%s:%d", __func__, __LINE__);
LOG_INFO_2("%s:%d", __func__, __LINE__);
Run Code Online (Sandbox Code Playgroud)

输出提供完全相同的格式.我只是想知道fmt在我的第一个宏中使用参数有什么好处?它似乎并不是真的需要.我怎么能利用它呢?

非常感谢任何建议,

abe*_*nky 5

指定第一个参数fmt对编译器/计算机没有影响.

但是,我认为这对可能使用您的代码的其他程序员有很大的不同.

看一下LOG_INFO_1(fmt, ...),我看到一个强烈暗示,这个宏在后面带有一个带有附加参数的printf样式的格式字符串.

LOG_INFO_2(...),我不知道应该传递什么参数,或者以什么顺序传递.也许第一个参数应该是RFC 5424严重性代码?也许应该是要写入的输出流?宏中没有任何内容暗示答案.

我认为你应该让那些追随你的程序员通过尽可能多地指定工作,并且只留下诸如...绝对必要的模糊之处.