你能安全地忽略变量参数吗?

时间:2014-07-19 13:03:57

标签: c variadic-functions

我们说我的功能如下:

#include <stdarg.h>
#include <stdio.h>
void message (const char *fmt, ...)
{
    va_list argptr;
    va_start(argptr, fmt);
    vprintf(fmt, argptr);
    va_end(argptr);
}

我想在另一个上下文中声明一个空函数消息,这样我就可以在没有printf的嵌入式平台上提供源级库而不使用ifdefs

我知道va_start必须由va_end清理,但是如果我根本不使用这些va_函数,我可以安全地假设编译器会清理堆栈吗?

void message (const char *fmt, ...) {
}

工作?

2 个答案:

答案 0 :(得分:2)

是的,忽略变量参数肯定是有效的。

多次遍历变量参数同样有效。

答案 1 :(得分:1)

当然你可以忽略你想要的任何论据 为了告诉编译器你真的想做什么,不要给它们起名字。

请注意,除非你的编译器可以内联调用,否则你的库避开预处理器而是使用空函数效率会降低。

为了减轻这种影响,请考虑将空函数定义为头文件中的内联函数。

此外,对于第一个,请将message定义为printf的别名,因为它实际上就是它的样子。