c - C 中允许重新声明全局变量?

标签 c variables storage global declaration

为什么 C 中允许使用此代码?

int x;

int main() {
    printf("%d\n", x);
    return 0;
}

int x = 2;

它使用 -Wall -std=c89gccclang 编译时没有警告。

我之前认为 int x 在全局范围内等同于 int x = 0。我发现自己很惊讶。

最佳答案

int x;,在文件范围内,是一个暂定定义,并由@PSkocik 回答。如果不存在具有初始化的定义,将像 int x = 0; 那样工作。

I have previously thought that int x at global scope is equivalent to int x = 0.

关于“全局”int x; 的棘手部分是假设它用 0 初始化。如果另一个 int x = constant; 没有初始化它,它就用 0 初始化存在于任何编译单元中。

因此建议在对象需要初始化时显式初始化,不要指望默认初始化为 0 位。

// Does an initialization exist, in some file -maybe?
int x;
// Better.  If another file initializes `x`, good to see a compiler/linker error.
int x = 0;

关于c - C 中允许重新声明全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075079/

相关文章:

javascript - 为变量分配一个随机值

ios - 存储概念 iOS - Swift

java - jCaptcha 线程安全吗?

c++ - snprintf Format String 安全漏洞问题

我们可以用 GCC 的内联函数来做到这一点吗?

c - 三重嵌套循环的时间复杂度?

将浮点文字转换为 x86 程序集中的 int 表示形式?

bash - 如何改进读取变量值并将其写入文件的逻辑?

asp.net 用户控件中的 Javascript 变量 - 覆盖同一插入用户控件中的变量

Android 检查已安装的 SD 卡始终返回 true