extern的连接发生在编译时的连接阶段,
但是看下面的代码中add()函数没有被调用,
extern void add();
int main() {
return 0;
}
此时没有定义add却没有编译问题,编译器的这个行为也不难理解。
因为add没有被调用,所以没定义也没关系。
extern void add();
int main() {
add();
return 0;
}
这样编译就不能成功,因为找不到add()的定义
test.cpp:(.text+0x5): undefined reference to `add()'
同样,extern修饰变量的时候也是这么个情况。