【问题标题】:variable with file scope in C without static keywordC中具有文件范围的变量,没有静态关键字
【发布时间】:2015-10-08 11:35:02
【问题描述】:

在下面的代码中,我从 file2.c 中 var10 的变量声明中删除了 extern 这个词文件。但结果是 10 和 34 而不是我预期的 10 和 10。所以我们不能在不使用静态关键字的情况下拥有文件范围的变量?如果两个变量的范围相同,为什么我们不会出现多重定义错误?我用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 mingw codeblocks


【解决方案1】:

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

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

【讨论】:

  • 这不是关于范围,而是关于链接。两者都是暂定定义。使用初始化程序使临时定义成为正常定义,因此如果您有两个具有相同名称的正常定义的文件,则会出现错误。 (注意:初始化器是否不同没有区别)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多