Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用/RTC1编译时,有时会抑制警告C4701_C++_Visual C++_Compiler Bug_Cl - Fatal编程技术网

C++ 使用/RTC1编译时,有时会抑制警告C4701

C++ 使用/RTC1编译时,有时会抑制警告C4701,c++,visual-c++,compiler-bug,cl,C++,Visual C++,Compiler Bug,Cl,这段代码(请注意注释行): 但是,当我在main()中取消对赋值的注释时,将不再给出警告。我正在使用/RTC1命令行选项进行编译,以启用: 我尝试了Visual C++ 2013和2015中最新的64位编译器版本。两者都产生了相同的行为 问题是:这是一个编译器错误,还是对此有解释?Microsoft的文档提到/RTC1可能会在给出C4701的地方给出运行时错误,但它没有提到被抑制的警告 编辑:令人费解的是,只有当缓冲区[0]=0时,警告才会消失不在注释中 在许多情况下,有些东西是次优的,可能是有

这段代码(请注意注释行):

但是,当我在
main()
中取消对赋值的注释时,将不再给出警告。我正在使用
/RTC1
命令行选项进行编译,以启用:

我尝试了Visual C++ 2013和2015中最新的64位编译器版本。两者都产生了相同的行为

问题是:这是一个编译器错误,还是对此有解释?Microsoft的文档提到/RTC1可能会在给出C4701的地方给出运行时错误,但它没有提到被抑制的警告


编辑:令人费解的是,只有当
缓冲区[0]=0时,警告才会消失不在注释中

在许多情况下,有些东西是次优的,可能是有缺陷的,甚至是未定义的,编译器很难检测到这一点。因此,您不应该依赖警告(和/或编译器检测触发的运行时错误)来提供完整的事实


要知道,当你做了一些愚蠢的事情时,编译器可能会发出警告。当你做了一些愚蠢的事情时,它还可能生成代码在运行时爆炸。只是永远不要依赖它。它无法检测所有内容,您必须自己了解规则。

尝试添加编译器选项/W4/W1是默认值,您可能需要更高。和/或尝试/墙。资料来源:我认为在这两种情况下都应该发出警告。否则,就会出问题。我不认为这条线会解决存在的问题,甚至不会降低它的概率。VS 2010无需重新说明。无论是否使用
/RTC1
开关编译,4701都会出现错误。请使用connect.microsoft.com报告此类问题,我们无法在此处修复此问题。我随机猜测他们会告诉您,当您使用/RTC1时,
p
实际上是初始化的,所以这是意料之中的。这很准确,请务必指出这不是您喜欢的行为。也许我的表述是错误的:只有在与/RTC1结合取消注释已注释的赋值时,警告才会被抑制。问题是,这个作业与
p
完全无关!我完全同意你的评论。但这里的问题是:警告在开发人员使用的调试版本中被抑制,并在生成服务器生成的发布版本中弹出。@Georgy Pashkov这并不意外。优化公开未优化版本中未出现的新警告/问题是很常见的。
#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
cl.exe /RTC1 warning.cpp