为什么在从C ++中的其他文件中使用全局变量的前向声明而不是函数需要extern

问题描述

据我所知,默认情况下,全局非常数变量和函数都具有外部链接。因此,可以在向前声明的帮助下从其他文件中使用它们。例如:

int myNum{888};

int getAnInt()
{
    return 999;
}

#include <iostream>

extern int myNum;  // "extern" keyword is required.
int getAnInt();    // "extern" keyword is NOT required.

int main()
{
    std::cout << getAnInt() << "\n";
    std::cout << myNum << "\n";
}

但是,如果extern前没有int myNum;。这将发生:

duplicate symbol '_myNum' in:
    /path~~/main.o
    /path~~/other.o
ld: 1 duplicate symbol for architecture x86_64

所以我的问题是extern为何需要myNum?默认情况下,全局非常数变量不具有外部链接吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)