【问题标题】:gcc, uninitialized global variablesgcc,未初始化的全局变量
【发布时间】:2012-06-07 07:14:30
【问题描述】:

如果全局变量未使用 gcc 初始化,有什么方法可以知道/警告?

我为局部/原子变量“-Wuninitialized”得到它

【问题讨论】:

    标签: c gcc


    【解决方案1】:

    不!
    如果您的代码未按照 C 标准的要求显式执行,则全局变量和静态变量将被隐式初始化。
    简而言之,全局变量和静态变量永远不会未初始化。

    【讨论】:

    • 默认情况下是的。我希望它们被显式初始化。任何静态分析器也应该没问题。
    • @AUZKamath:不。由于标准已经要求全局变量默认初始化 gcc 不会为未初始化的全局变量提供警告或诊断。
    【解决方案2】:

    6.9.2 外部对象定义

    语义

    1 如果对象标识符的声明具有文件范围和初始化程序,则 声明是标识符的外部定义。

    2 具有文件范围但没有初始化程序的对象的标识符声明,以及 没有存储类说明符或带有存储类说明符 static,构成一个 暂定定义。如果一个翻译单元包含一个或多个暂定定义 标识符,并且翻译单元不包含该标识符的外部定义,则 该行为就像翻译单元包含该文件的文件范围声明一样 标识符,具有从翻译单元末尾开始的复合类型,带有初始化器 等于 0。

    上述两个子句(来自标准)保证文件范围(全局)对象总是被初始化。

    【讨论】:

      【解决方案3】:

      不,因为 gcc 会自动将所有全局和静态变量初始化为“0”。

      【讨论】:

      • 不只是 gcc。查看其他答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多