全局变量默认是外部的,为什么还要加"extern"关键字?
Why to add "extern" keyword if the global variable is external by default?
main.cpp
#include <iostream>
extern int g_x; // this extern is a forward declaration of a variable named g_x that is defined somewhere else
int main()
{
std::cout << g_x; // prints 2
return 0;
}
add.cpp
int g_x { 2 };
如果我在 main.cpp 中删除 extern,则代码将不起作用。另一方面,我不需要 extern in add.cpp。默认情况下,全局变量是外部的,但仍然如此。是因为外部链接是在不同文件中链接的两个实体之间的“单向关系”吗?
extern
不同于外部链接。 extern
只是意味着你做了一个声明,并且变量在 其他地方.
定义
如果您删除 extern
,int g_x
将在 main.cpp
中被 定义 ,这将违反 ODR(因为您已经定义了两次)。
main.cpp
#include <iostream>
extern int g_x; // this extern is a forward declaration of a variable named g_x that is defined somewhere else
int main()
{
std::cout << g_x; // prints 2
return 0;
}
add.cpp
int g_x { 2 };
如果我在 main.cpp 中删除 extern,则代码将不起作用。另一方面,我不需要 extern in add.cpp。默认情况下,全局变量是外部的,但仍然如此。是因为外部链接是在不同文件中链接的两个实体之间的“单向关系”吗?
extern
不同于外部链接。 extern
只是意味着你做了一个声明,并且变量在 其他地方.
如果您删除 extern
,int g_x
将在 main.cpp
中被 定义 ,这将违反 ODR(因为您已经定义了两次)。