C语言中Extern的用法是什么?

545 阅读2分钟

术语 "extern "被用来定义C语言中的全局变量。"extern "这个词表明它是由 "external "这个词缩写而来,意思是外部。因此,这些变量在整个C语言代码中是可以全局访问的。这些变量总是在主方法之外被初始化和定义。本指南是为那些想用C语言探索 "外部 "变量的工作的用户准备的。那么,让我们继续吧。

例子01:

通过 "Ctrl+Alt+T "启动终端后,你需要创建一个C文件。触摸 "命令已被广泛用于创建任何文件。所以,我们用 "touch "指令创建了一个文件 "test.c",如下图输出。

$ touch test.c

使用 "nano "指令打开该文件,添加一些C代码。nano "这个词是指用于更新和编辑文件的GNU编辑器。

$ nano test.c

在该文件中,我们写了快照中所示的代码。包括了输入-输出流头文件。之后,声明一个外部变量 "z"。我们还没有给变量 "z "分配任何值。这段代码中没有函数或main方法。print语句被用来显示外部变量 "z "的值。

通过 "Ctrl+S "保存这个代码文件,然后通过 "Ctrl+X "回到终端。这个C文件 "test.c "的编译是由Ubuntu 20.04 Linux系统支持的 "gcc "编译器完成的。编译错误表明外部变量必须用某种值来定义。

$ gcc test.c

例子02:

让我们再次打开同一个文件,对它进行一些更新。这一次,我们将在代码中使用 "main "方法。我们在main方法之外声明了变量 "z"。

文件 "test.c "的编译会抛出一个异常,即变量 "z "在main方法中被未定义。 这是因为变量 "z "还没有被赋值,因此没有进行内存分配。

$ gcc test.c

请再次打开该文件,并按快照中所示进行更新。我们在主方法之外声明了外部变量 "z",然后在主方法内将其值改为 "13"。print语句被用来显示这个值。

在编译 "test.c "文件时,我们得到了与之前相同的错误以及另外一个错误。我们没有给外部变量 "z "赋值,因此没有给 "z "分配内存。 另外,我们想把变量 "z "的值改为 "13",而它还没有被分配到用于保存值的内存。

$ gcc test.c

例子03:

让我们再一次更新一下文件。这一次,我们在主方法之外声明并定义了一个外部变量 "z",其值为 "13"。在main方法中,一个print语句被用来打印和显示外部变量 "z "的值。

文件 "test.c "的编译已经成功,正如输出所显示的。

$ gcc test.c

虽然文件的执行成功显示了成功信息和变量 "z "的值。这是因为变量 "z "已经同时被定义和声明。

$ ./a.out

由于外部变量的默认值总是0,你可以用这个来定义它。在定义它为0的同时,你可以很容易地在任何方法中改变它的值,如下图。

编译将会成功。

$ gcc test.c

这次更新后,打印语句也将正常工作。

$ ./a.out

你也可以在函数之外给变量赋值,然后在方法中定义它,得到同样的结果。

编译和执行已在图片中显示。在输出中已经展示了外部值。

$ gcc test.c

$ ./a.out

总结

这篇文章通过利用一些简单易行的例子包含了C语言中的extern关键字。这个实现包含了在main方法内部和外部的extern变量的声明,将对你有最好的帮助。