如果全局变量默认是外部变量,为什么要添加"extern"关键字?

Why to add "extern" keyword if the global variable is external by default?

本文关键字:添加 extern 关键字 为什么 默认 全局变量 外部 变量 如果      更新时间:2023-10-16

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;
}

添加.cpp

int g_x { 2 };

如果我在 main.cpp 中删除 extern,那么代码不起作用。另一方面,我不需要 extern 在 add.cpp。默认情况下,全局变量是外部变量,但仍然是外部变量。是因为外部链接是链接在不同文件中的两个实体之间的"单方面关系"吗?

extern不同于外部链接extern只是意味着你做了一个声明,并且变量是在其他地方定义的。

如果删除externint g_x将在违反 ODRmain.cpp定义(因为您已经定义了两次(。