繁体   English   中英

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

[英]Why is extern required for forward declaration of global variables but not for functions when using them from other files in C++

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

<其他.cpp>

int myNum{888};

int getAnInt()
{
    return 999;
}

<主.cpp>

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

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

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

所以我的问题是为什么myNum需要extern 全局非常量变量不是默认有外部链接吗?

因为两者之间存在差异

int getAnInt(); 

int getAnInt() { ... }

即括号本身,因此不需要像extern这样的标记来区分两者。

特别是,前者是一个声明,它只是声明getAnInt存在并返回一个int等,而后者给出了它的定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM