C - GCC,未初始化的全局变量



有没有办法知道/警告全局变量是否未使用 gcc 初始化?

我为局部/原子变量"-Wuninitialized"得到了它

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

6.9.2 外部对象定义

语义学

1 如果对象的标识符声明具有文件作用域和初始值设定项,则 声明是标识符的外部定义。

2 具有文件范围但没有初始值设定项的对象的标识符声明,以及 如果没有存储类说明符或具有静态存储类说明符,则构成 暂定定义。如果翻译单元包含一个或多个暂定定义 标识符,并且翻译单元不包含该标识符的外部定义,则 该行为与翻译单元包含的文件范围声明完全相同 标识符,具有截至翻译单元末尾的复合类型,带有初始值设定项 等于 0。

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

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

最新更新