Warning C4701 is sometimes suppressed when compiling with /RTC1
这段代码(请注意注释行):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #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; } |
给出以下警告(如预期):
1 | f:\\d\\warning.cpp(13) : error C4701: potentially uninitialized local variable 'p' used |
但是,当我取消注释
1 | cl.exe /RTC1 warning.cpp |
我已经尝试了Visual C 2013和2015的最新64位版本的编译器。两者都产生相同的行为。
问题是:这是编译器错误,还是对此有解释? Microsoft的文档提到/ RTC1可能会在给出C4701的地方给出运行时错误,但是它并没有说明警告被抑制了。
编辑:令人费解的是,只有
在许多情况下,某些东西不是最理想的,可能是错误的甚至是未定义的,编译器很难检测到这一点。因此,您不应依赖警告(和/或由编译器检测触发??的运行时错误)来提供完整的真相。
请注意,当您执行愚蠢的操作时,编译器可能会发出警告。当您执行某些愚蠢的操作时,它也可能会生成代码以在运行时崩溃。只是永远不要依赖它。它无法检测所有内容,您必须自己了解规则。