如果全局变量未使用 gcc 初始化,有什么方法可以知道/警告?
我得到了局部/原子变量“-Wuninitialized”</p>
不!
如果您的代码未按照 C 标准的要求显式执行,则全局和静态变量将被隐式初始化。
简而言之,全局变量和静态变量永远不会未初始化。
6.9.2 外部对象定义
语义
1如果对象标识符的声明具有文件范围和初始化程序,则该声明是标识符的外部定义。
2具有文件范围的对象的标识符声明,没有初始值设定项,也没有存储类说明符或存储类说明符 static,构成一个暂定定义。如果翻译单元包含一个或多个标识符的暂定定义,并且翻译单元不包含该标识符的外部定义,则行为与翻译单元包含该标识符的文件范围声明完全相同,复合类型为翻译单元的末尾,初始化器等于 0。
上述两个子句(来自标准)保证文件范围(全局)对象总是被初始化。
不,因为 gcc 会自动将所有全局和静态变量初始化为“0”。