0

我正在从该网站上阅读有关外部存储类的信息:

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 的定义

由于我们无法定义作为外部存储类的变量,它如何正常工作?

这是否意味着如果一个外部变量已经在脚本中的某个地方定义了,然后如果我在我的代码中进一步重新定义它,它就会起作用?

4

2 回答 2

0

关键字extern表示外部链接。下面给出的示例给出了一些关于extern使用的基础知识。

某个类.h

#pragma once
extern int var; //this DECLARES an GLOBAL int variable named var with EXTERNAL LINKAGE

在上面someclass.h,我们声明了一个名为外部链接的全局 int变量。这意味着我们将能够从其他文件中使用此变量。var

某类.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我们定义了在文件中声明的名为的全局变量。varsomefile.h

主文件

#include "somefile.h" 
#include <iostream>
int main(void) 
{ 
 std::cout<< var<<std::endl;  //prints 10
 return 0; 
}

在上面的文件中,main.cpp我们使用了(打印在控制台上)名为的全局var变量,但没有在main.cpp. 这是可能的,因为我所说的变量var具有外部链接

程序的输出可以在这里看到。

于 2021-12-18T14:08:56.033 回答
0

C 语言有方法论:- 首先声明它并按照您在 C 中的日常使用来定义它。您声明一个函数并在某个不利的地方定义它。

主要的事情是声明一个变量不分配内存。内存仅在您定义后才分配,在这种情况下,var 被声明为在 somefile.h 中定义,内存仅通过该文件分配,在此示例中,extern 声明此变量在其他地方定义,并且已为它初始化内存。[博客]:https ://errbits.com/2021/12/16/storage-classes-in-c/ “C 中的存储类”

虽然编译时编译器验证相同,如果 var 已经在 somefile.h 中定义,它将无错误地编译,因为它将检查其符号表以验证它是否存在。

于 2021-12-18T13:42:36.423 回答