我们可以定义一个具有外部存储类的变量吗



我从这个网站上读到了关于外部存储类的信息:

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如我所说具有外部链接

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

相关内容

  • 没有找到相关文章

最新更新