c++ - extern 声明变量和全局变量的区别

标签 c++ c oop variables

这个问题在这里已经有了答案:





extern and global in c

(5 个回答)


1年前关闭。




我对在 hxx 文件中使用 extern 声明变量然后在每个 cxx 文件中定义它有什么好处感到困惑。
我知道我们确实在这里节省了内存(如果有 10 个源文件,而不是 10 倍的内存,我们只是分配一次)。除此之外,他们还有其他广泛的 extern 好处吗?它与在 hxx 文件中声明的普通全局变量有何不同?
我理解 extern 对变量的作用是:使用 extern 声明时,变量只声明一次,但可以定义多次。就像为每个源文件设置单独的变量一样,无需一次又一次地分配内存。
我在这里遗漏了一些东西,在这里得到一些详细的解释会很棒。谢谢

最佳答案

What i understand extern does to a variable is: When declared with extern, a variable is just declared once but can be defined multiple times.


不,这是不正确的。
一般定义一个对象或函数一次 , 在 一个 源文件。
它在与该源文件关联的头文件中声明。该头文件包含在其他源文件中以包含该声明。该声明使编译器在编译其他源文件时知道有关对象或函数的信息。它没有定义对象或功能。它只是为编译器提供了使用对象或函数所需的信息。
(头文件也应该包含在与之关联的源文件中。这样编译器可以在同一编译中同时看到声明和定义,因此如果存在差异,它将打印警告。)

Its like having separate variable for each of the source files without allocating memory again and again.


不,只有一个定义,因此每个源文件都没有单独的对象。多个源文件使用(共享)一个对象。

关于c++ - extern 声明变量和全局变量的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63618823/

相关文章:

C++ 有故障?

c++ - 是否有 C++ 等效于 Objective-C 的自动释放?

ctrl+c 不发送 SIGKILL 进行处理

java - 继承Java父类(super class)和类型转换

Javascript:将私有(private)方法分配给私有(private)变量

c++ - 使用 set_union 合并两个集合时分配只读位置

c - 为 struct - C 中的 typedef 字段发出初始化值

objective-c - 内存管理 : NSString's stringWithCString:encoding:

java - 如何重构内部类MouseAdapter?

c++ - 线程完成后执行一些操作