【问题标题】:Set default value of Bool in C++ through complier [closed]通过编译器在 C++ 中设置 Bool 的默认值 [关闭]
【发布时间】:2020-10-20 11:04:54
【问题描述】:

我正在尝试对开源 C++ 项目进行一些更改。 我知道C++中BOOL的值在声明的时候应该初始化,否则会出人意料。但是几乎所有源代码中的布尔变量都是这样声明的未初始化

bool oracle_pro_decl;
bool _oracle_external_procedure;
bool _oracle_language_procedure;

我使用 GNU C++ 作为编译器,有没有办法将 bool 的所有默认值设置为 false?

【问题讨论】:

  • are uninitialized declared like this 它们是否在文件范围中声明?
  • 是的,它们是在头文件中声明的。
  • 你可能知道错了。考虑阅读good C++ programming book,然后查看this C++ reference
  • I know that the value of BOOL in C++ should be initialized when declared, otherwise it will be unexpected 不精确。未初始化的变量将具有不确定的值。但是有些情况下变量是默认初始化的。 at head files什么是“头部填充物”?在file scope 定义的标识符有static storage durationzero initialized

标签: c++ boolean


【解决方案1】:

我使用 GNU C++ 作为编译器,有没有办法将 bool 的所有默认值设置为 false?

如果这样做,您将更改 C++ 的 semantics。阅读 C++11 标准 n3337 并查看 this C++ reference 网站。

但是,您可以编写 GCC plugin 这样做(隐式初始化每个 bool automatic variable 为 false)。您的插件可以在 GIMPLE 级别运行。

我认为编写这样的 GCC 插件是个坏主意。

我的建议是启用更多警告和调试信息,即编译 with g++ -Wall -Wextra -g 然后使用 GDB 调试器(可能还有 valgrind)。一旦你的程序几乎没有错误,你可能会要求 GCC 进行更多优化(例如使用-O2

您也可以考虑使用Clang static analyzer

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多