在 C 语言中,外部存储类说明符的重要性和用法



可能的重复项:
什么是外联和内联C++

其实我想知道extern的重要性。

首先我写了一些代码:

文件1.h

extern int i;

文件2.c

#include<stdio.h>
#include "file1.h"
 int i=20;
int main()
{
   printf("%d",i);
   return 0;
}

现在我的问题是:当我必须在file2.c中定义i时,extern变量有什么用,在file1.h中声明对我有用。

苏丹书

extern允许您声明一个变量(通知编译器它的存在),而无需定义它(使其存在)。一般规则是,您可以根据需要多次声明事物,但只能定义一次。

例如,如果要在其他地方定义它,这将很有用。

考虑:

file1.c:                   file2.c:
    extern int xyzzy;          int xyzzy;
    void fn (void) {
        xyzzy = 42;
    }

当你将这两个函数链接在一起时,将有一个xyzzy,即file2.c中定义的那个,这就是fn将要改变的那个。

现在即使没有extern也会发生这种情况.extern所做的是声明xyzzy存在file1.c,这样您就不会收到任何I don't know what the blazes "xyzzy" is错误。

在您的特定情况下(如果这是您唯一的两个文件),则不需要它。仅当您有另一个#include d file1.h并尝试访问i的文件时才需要它。

当您有三个文件时,它很有用:

福.H

extern int i;
void bar();

交流:

#include "foo.h"
int i = 6;
int main(){
    bar();
}

公元前:

#include "foo.h"
void bar(){
      printf("%dn", i);
}

如您所见,ia.cb.c之间共享,而不是像没有extern关键字时那样按文件重新定义。

C 中的 "extern" 声明表示全局变量的存在及其类型。

在C语言中,大多数.c文件的行为就像一个单独的模块。因此,带有"extern"的变量是在当前模块外部定义的东西。

在一个地方定义全局,然后在所有其他地方声明对它的外部引用总是更好的做法。当引用任何共享库提供的全局变量时,这对于确保您的代码引用变量的正确且通用的实例非常重要。

来自维基百科:

定义变量时,编译器会为其分配内存 变量,也可能将其内容初始化为某个值。 声明变量时,编译器要求该变量 在别处定义。该声明通知编译器 存在具有该名称和类型的变量,但编译器不需要 为它分配内存,因为它是在其他地方分配的。

Extern 是一种显式声明变量或强制 没有定义的声明

如果在文件 1 中定义了变量,以便使用相同的变量 变量,则必须声明它。无论 文件数,此变量仅定义一次,但是,它必须 在包含定义的文件之外的任何文件中声明。

如果程序位于多个源文件中,并且定义了变量 在文件 1 中并在文件 2 和文件3 中使用,则外部声明是 在 File2 和 File3 中需要连接变量的出现次数。

extern告诉编译器它是一个变量的声明。

在 file1.h 的示例中,想象一下如果您不指定 extern 关键字会发生什么。看起来int i有两个定义。此外,头文件可以包含在许多 .c 文件中。如果编译这些 .c 文件并链接它们,链接器将看到同一变量的多个定义。

extern 关键字允许您对编译器说..." 立即使用此变量。我稍后将定义并初始化它"..即" 立即编译.我稍后将链接到其定义"。

当您在其他文件中定义变量并希望在当前上下文中使用它时,您可以 extern

标头

中的声明允许您从多个源文件访问变量,同时仍然只在一个位置定义它。

最新更新