[英]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.