FlexeLint在va_list

时间:2017-05-07 14:14:40

标签: c linux variadic-functions

为什么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?

1 个答案:

答案 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_argva_end宏后续使用。 va_start也不是va_copy   应调用ap宏来重新初始化va_end而不使用   干预调用同一ap的{​​{1}}宏。