为什么FLexeLint会抛出错误" 警告530:符号' va' (第23行)未初始化"在下面的代码。
void debug(int msglevel, const char *fmt, ...)
{
va_list va;
va_start(va, fmt);
vfprintf(stderr, fmt, va);
va_end(va);
}
是否有必要初始化va_list?
答案 0 :(得分:0)
没有必要。来自man page for stdarg:
void va_start(va_list ap, last);
va_start()
宏初始化ap以供va_arg()
后续使用 和va_end()
,必须先调用。
此外,来自C standard的第7.16.1.4节:
2 在访问未命名的参数之前,应调用
va_start
宏。3
va_start
宏初始化ap
以供va_arg
和va_end
宏后续使用。va_start
也不是va_copy
应调用ap
宏来重新初始化va_end
而不使用 干预调用同一ap
的{{1}}宏。