我从这个网站上读到了关于外部存储类的信息:
https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
有一个例子:
#include "somefile.h"
extern int var;
int main(void)
{
var = 10;
return 0;
}
假设somefile.h具有var 的定义
既然我们不能定义作为外部存储类的变量,它是如何正确工作的?
这是否意味着,如果一个外部变量已经在脚本中的某个地方定义了,然后如果我在代码中进一步定义它,它就会起作用?
C语言有方法论:-首先声明它并定义它,就像你在C中的日常使用一样。你声明一个函数并在某个不利的地方定义它。
主要是声明一个变量不分配内存。内存只有在定义后才会分配,在这种情况下,var被声明为在somefile中定义良好。h内存仅通过该文件分配,在本例中,extern声明该变量在其他地方定义,并且内存已经为其初始化。[博客]:https://errbits.com/2021/12/16/storage-classes-in-c/";C"中的存储类;
当编译时编译器验证这一点时,若var已经在somefile.h中定义,它将编译而不会出错,因为它将检查其符号表以验证是否存在。
关键字extern
表示外部链接。下面给出的示例提供了有关extern
使用的一些基础知识。
someclass.h
#pragma once
extern int var; //this DECLARES an GLOBAL int variable named var with EXTERNAL LINKAGE
在上面的someclass.h
中,我们已经声明了一个全局int
变量,名为var
,具有外部链接。这意味着我们将能够从其他文件中使用此变量。
someclass.cpp
#include "somefile.h"
int var = 10; //this DEFINES the GLOBAL int variable named var that was DECLARED inside somefile.h with external linkage
在上面的文件someclass.cpp
中,我们已经定义了名为var
的全局变量,该变量是在文件somefile.h
中声明的。
main.cpp
#include "somefile.h"
#include <iostream>
int main(void)
{
std::cout<< var<<std::endl; //prints 10
return 0;
}
在上面的文件main.cpp
中,我们使用了(打印在控制台上(名为var
的全局变量,而没有在main.cpp
中定义它。这是可能的,因为变量var
如我所说具有外部链接。
程序的输出可以在这里看到。