让我们说这样的代码:
va_list args;
va_start(args,size);
va_end(args);
在这种情况下,静态分析器没有问题,但是当我重写代码以便可以处理异常时退出范围:
va_list args;
auto closeVaList = [](va_list* list) {va_end(*list);};
va_start(args,size);
std::unique_ptr<va_list,decltype(closeVaList)> guard{&args,closeVaList};
C语静态分析器报告:
warning: va_end() is called on an uninitialized va_list [clang-analyzer-valist.Uninitialized]
auto closeVaList = [](va_list* list) {va_end(*list);};
^
note: expanded from macro 'va_end'
#define va_end(ap) __builtin_va_end(ap)
这是虚假报告还是我做错了什么?