功能声明与extern和没有它的区别

时间:2011-10-23 14:07:06

标签: c++

有这样的代码:

#include <iostream>

extern void fun();

int main(){
    fun();
    return 0;
}

void fun(){ std::cout << "Hello" << std::endl; }

声明之间是否存在一些差异:

extern void fun();
void fun();

?上面的代码与extern和没有extern关键字的行为相同。

2 个答案:

答案 0 :(得分:8)

默认情况下,函数声明确实有 external linkage ,因此将extern关键字添加到函数声明中没有任何区别,这是多余的。

答案 1 :(得分:2)

这两个陈述之间的区别是:

extern void fun();

告诉编译器和链接器在这个文件中的代码引用fun()时查看另一个文件,可能是通过调用fun();这种制作被称为“宣言”。

void fun ( ) {
  ...
}

定义 函数fun(),因为它在此文件中定义,所以不需要链接器在其他地方查找函数。

声明函数extern没有坏处:链接器做正确的事情。