2017-05-07 44 views
0

为什么FLexeLint在下面的代码中抛出错误“警告530:符号'va'(第23行)未初始化”。FlexeLint在va_list上抛出错误

void debug(int msglevel, const char *fmt, ...) 
{ 
va_list va; 
va_start(va, fmt); 
vfprintf(stderr, fmt, va); 
va_end(va); 
} 

是否需要初始化va_list?

回答

0

这是没有必要的。从man page for stdarg

void va_start(va_list ap, last); 

va_start()宏,va_arg()va_end()初始化为后续使用AP,必须首先调用。

另外,从C standard第7.16.1.4:

va_start宏应之前,将未命名的参数的任何接入被调用。

va_start宏用于由va_argva_end宏后续使用初始化ap。不应该调用va_startva_copy宏来重新初始化ap而不是 中间调用va_end宏用于相同的ap