【问题标题】:Visual Studio 2017 does not generate any warnings if the variables are uninitialized?如果变量未初始化,Visual Studio 2017 不会生成任何警告?
【发布时间】:2019-11-01 03:16:29
【问题描述】:

Visual Studio 的问题和变量未初始化时的警告

我尝试过另一种编译器,例如 Clang。 Clang 能够生成警告。

//clang 3.8.0
//MSVS 2017
#include<iostream>
using namespace std;

class dummy
{
public:
    void dummyFunction()
   {
        static_cast<int>(m_DummyVariable);
   }
private:
    double m_DummyVariable;
};

int main()
{
    dummy obj;
    double outside;
    static_cast<int>(outside);
    obj.dummyFunction();
    return 0;
}

我预计会收到三个警告,因为在线 clang 能够做到这一点。但是,在 Visual Studio 中,无论我在项目属性中设置的警告级别(1、2、3、4 或所有警告选项)如何,我都无法收到任何警告。我是否必须更改项目的任何属性?

【问题讨论】:

  • 你使用的编译命令是什么?我似乎记得 Visual Studio 默认使用 /W3
  • 编译器可以发出的大多数警告不是标准要求的。所以我想知道你为什么期望从微软的 CL.EXE 编译器/链接器中得到三个警告。
  • 您在实际使用未初始化值时是否收到警告?我的意思是一个没有被自己初始化的值并不是真正的问题
  • 请注意,clang 3.8 只有 1 个关于正在使用的未初始化变量的警告。另外两个是static_cast被丢弃的结果。我找不到可以抱怨dummyFunction 中未初始化成员的clang 版本。真的不足为奇。
  • @foreknownas_463035818 是的,这对于double 意味着让它未初始化。

标签: c++ visual-studio initialization clang warnings


【解决方案1】:

如果您右键单击您的项目并点击属性,请转到底部并单击代码分析。将规则集更改为 Microsoft 所有规则以及勾选框以在构建上运行代码分析会使我出现警告。 值得注意的是,只要我将外部变量发送到标准输出,Visual Studio 就会引发警告和错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多