c - 没有static关键字的C中具有文件范围的变量

标签 c mingw codeblocks

在下面的代码中,我从 file2.c 中 var10 的变量声明中删除了单词 extern 我期望两个文件中的变量 var10 彼此独立,并且当其中一个文件中未使用 extern 时,它们都具有文件范围文件。但结果是 10 和 34,而不是我预期的 10 和 10。所以我们不能在不使用 static 关键字的情况下拥有文件范围的变量?如果两个变量的范围相同,为什么我们不会出现多重定义错误?我用的是codeblcoks+mingw

file1.c

#include <stdio.h>
int var10;

int main (void)
{
    var10=10;
    printf("Var10 before function call=%d\n",var10);
    var10TestFunc2();
    printf("Var10 after function call=%d\n",var10);
}

file2.c

#include<stdio.h>

int var10;
void var10TestFunc2(void)
{
    var10 = 34;
}

最佳答案

默认情况下,没有静态的全局变量具有全局作用域。在这里你定义了相同的变量(没有初始化)。一个被视为定义,另一个被编译器视为声明。

如果您在定义本身中使用两个不同的值初始化变量。它将导致链接器错误。

关于c - 没有static关键字的C中具有文件范围的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33014601/

相关文章:

c - __get_cpuid 的可移植性如何?

eclipse - 移动了我的 mingw 安装 - 现在 eclipse cdt 无法解析包含

c - 使用 Eclipse 和 mingw 限制 fftw 的数组大小?

c++ - Codeblocks 找不到英特尔 C++ 编译器 (Linux Mint)

c - fread 不会更改函数中的指针值(导致带有 feof 的无限循环)-C

c - 使用 Code::Blocks 调试 C

c - C练习查询

c - 避免段错误

c - `__heap_base`在clang 9.0.0中好像不见了,有没有替代品?

c++ - Qt5 中的拆分器是不可见的