c++ - 如何在 C++ 中查找和避免未初始化的原始成员?

标签 c++ gcc static-analysis

对于未初始化的原始成员,存在一个常见的 C++ 错误:

#include <iostream>

class A {
  public:    
    int x;
};

int main() {
  A a;
  std::cout << a.x;
  return 0; 
}

a.x 将被取消初始化。我理解为什么会发生这种情况,并希望找到一种解决方案来捕获此类错误。我检查了 gcc 和 cppcheck,他们没有报告这些成员。

编辑 使用标志检查 gcc -Wall -Wextra -Werror -pedantic -Wold-style-cast -Wconversion -Wsign-conversion -Wunreachable-code

检测到错误的第一个 gcc 版本是 5.1。 g++-4.9 没有检测到它,clang++-3.6 也检测不到。

最佳答案

Yes they do ……有点像:

main.cpp: In function 'int main()':
main.cpp:10:18: warning: 'a.A::x' is used uninitialized in this function [-Wuninitialized]
   std::cout << a.x;
                  ^
0

在上面的链接示例中,我使用带有 -Wall 的 GCC 5.1 trunk。

打开更多 GCC 警告和/或升级。

也测试过,发现警告:

  • 海湾合作委员会 4.4.7
  • GCC 4.9.2(作者 RiaD)
  • clang 3.6.0

老实说,我不确定您还能做什么。您可以创建一个工具来执行此操作,但随后您将创建一个编译器或静态分析器。 :)

所以,我想,只希望知道如何做到这一点的人 catch ......

关于c++ - 如何在 C++ 中查找和避免未初始化的原始成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435505/

相关文章:

swift - 是否可以在 Swift 中创建 "Positive Number"类型?

c++ - CMake:如何检查是否已定义某些标志

c++ - EnumProcesses - 奇怪的行为

gcc - gcc编译器不会在第一个错误时停止

c++ - 使用 clang 内置函数与标准函数的好处

java - Groovy 检查未使用的导入

c++ - 从C++ 17开始的prvalue差异中的直接列表初始化与复制列表初始化与复制初始化的示例

c++ - 函数返回 C++ 的段错误

c++ - 当g++静态链接pthread时,导致段错误,为什么?

javascript - 数据属性中的 ES6 连接