为什么clang-tidy说vsnprintf有未初始化的va_list参数?

Jos*_*son 5 c variadic-functions clang-tidy

在以下函数中,我进行初始化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;
}
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,这只会在我一次清理多个文件时发生,因此clang-tidy tmp2.c不会发出警告,但是clang-tidy tmp2.c tmp2.c会发出警告!

这是我的代码还是clang-tidy的问题?我使用的是LLVM 7.0.0版,但8.0.0也会出现该警告。

JL2*_*210 5

这是一个错误clang-tidy。它与这个 bug最相似,你显然已经看到了。

此外,根据评论中的注释,您不必强制转换0(void *). 演员表已经是隐式的。