我们说我的功能如下:
#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, ...) {
}
工作?
答案 0 :(得分:2)
是的,忽略变量参数肯定是有效的。
多次遍历变量参数同样有效。
答案 1 :(得分:1)
当然你可以忽略你想要的任何论据 为了告诉编译器你真的想做什么,不要给它们起名字。
请注意,除非你的编译器可以内联调用,否则你的库避开预处理器而是使用空函数效率会降低。
为了减轻这种影响,请考虑将空函数定义为头文件中的内联函数。
此外,对于第一个,请将message
定义为printf
的别名,因为它实际上就是它的样子。