这段代码(注意注释行):
#include <malloc.h>
#pragma warning(error: 4701)
int main(){
char buffer[1024];
//buffer[0] = 0;
void *p;
int size = 1;
if (size < 2)
p = malloc(size);
free(p); // C4701
return 0;
}
给出以下警告(如预期的那样):
f:\d\warning.cpp(13) : error C4701: potentially uninitialized local variable 'p' used
但是,当我取消注释中的分配时main()
,不再给出警告。我正在使用/RTC1
命令行选项进行编译以启用运行时错误检查:
cl.exe /RTC1 warning.cpp
我已经尝试了 Visual C++ 2013 和 2015 中最新的 64 位版本的编译器。两者都产生了相同的行为。
问题是:这是编译器错误,还是对此有解释?微软的文档提到 /RTC1 可能会在给出 C4701 的地方给出运行时错误,但它没有说明警告被抑制。
编辑:令人费解的部分是警告仅在buffer[0] = 0;
未发表评论时才会消失。