【发布时间】:2012-06-07 07:14:30
【问题描述】:
如果全局变量未使用 gcc 初始化,有什么方法可以知道/警告?
我为局部/原子变量“-Wuninitialized”得到它
【问题讨论】:
如果全局变量未使用 gcc 初始化,有什么方法可以知道/警告?
我为局部/原子变量“-Wuninitialized”得到它
【问题讨论】:
不!
如果您的代码未按照 C 标准的要求显式执行,则全局变量和静态变量将被隐式初始化。
简而言之,全局变量和静态变量永远不会未初始化。
【讨论】:
6.9.2 外部对象定义
语义
1 如果对象标识符的声明具有文件范围和初始化程序,则 声明是标识符的外部定义。
2 具有文件范围但没有初始化程序的对象的标识符声明,以及 没有存储类说明符或带有存储类说明符 static,构成一个 暂定定义。如果一个翻译单元包含一个或多个暂定定义 标识符,并且翻译单元不包含该标识符的外部定义,则 该行为就像翻译单元包含该文件的文件范围声明一样 标识符,具有从翻译单元末尾开始的复合类型,带有初始化器 等于 0。
上述两个子句(来自标准)保证文件范围(全局)对象总是被初始化。
【讨论】:
不,因为 gcc 会自动将所有全局和静态变量初始化为“0”。
【讨论】: