首页 > 解决方案 > extern 关键字似乎没有任何作用

问题描述

我在文件 ac 中有以下程序:

#include<stdio.h>
#include"b.c"
int main(void){
  extern int a;
  a+=2;
  printf("%d\n",a);
  return 0;
}

文件 bc 如下:

int a=1;

现在我使用 extern 关键字来声明变量 a,但没有定义它。因此,我可以更改它的内容,打印它会打印 3。

我不明白的是,如果我extern int a;从 ac 中删除该行,程序也会运行并且输出仍然是 3。

我认为要更改 bc 中的变量,您必须使用 extern 关键字。

这里发生了什么?

标签: cextern

解决方案


以这个程序为例:

#include<stdio.h>
void main()
{
    extern int y;
    printf("%d",y);
}
int y=10;

这个的输出是:

10

extern是一个声明,而不是一个定义。

它没有定义变量,这意味着它没有给它任何内存。它只声明变量,以便您可以使用它。

在您的示例中,您不必声明a它已经定义的简单原因,因为这#include基本上是将粘贴代码复制到您的程序中。

如果你搬家

#include"b.c"

在程序的底部,您需要该extern语句,因为y尚未定义。

旁注:如@John Bollinger所说extern,如果它有等号,则可以是一个定义。但是,在您的示例中,情况并非如此。


推荐阅读