全局变量默认是外部的,为什么还要加"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 只是意味着你做了一个声明,并且变量在 其他地方.

定义

如果您删除 externint g_x 将在 main.cpp 中被 定义 ,这将违反 ODR(因为您已经定义了两次)。