【发布时间】:2020-02-28 13:28:19
【问题描述】:
在下面的函数中,我初始化args,在对va_start的调用中使用它们,然后调用va_end。
代码在我看来是正确的,但 clang-tidy 给出了警告:
tmp2.c:7:11: error: Function 'vsnprintf' is called with an uninitialized va_list argument [clang-analyzer-valist.Uninitialized,-warnings-as-errors]
len = vsnprintf((void*)0, 0, format, args);
#include<stdarg.h>
#include<stdio.h>
int f(char *format, ...) {
int len;
va_list args;
va_start(args, format);
len = vsnprintf((void*)0, 0, format, args);
va_end(args);
return len;
}
更奇怪的是,这只发生在我一次 lint 多个文件时,所以 clang-tidy tmp2.c 不会发出警告,但 clang-tidy tmp2.c tmp2.c 会发出警告!
这是我的代码或 clang-tidy 的问题吗?我使用的是 LLVM 版本 7.0.0,但警告也会出现在 8.0.0 中。
【问题讨论】:
-
这是一个整洁的错误。不知道它是什么号码,但我可以稍后查找。
-
(void *)演员表不需要,而且会适得其反。 -
@JoshuaNelson, JL2210:这应该是一个答案,不是吗?
-
如果 JL 想让它成为答案,我会将其标记为已接受 :)
标签: c variadic-functions clang-tidy