带extern和不带extern的函数声明的区别

Difference between declaration of function with extern and without it

本文关键字:extern 区别 声明 函数      更新时间:2023-10-16

有这样的代码:

#include <iostream>
extern void fun();
int main(){
    fun();
    return 0;
}
void fun(){ std::cout << "Hello" << std::endl; }

是否有不同的声明:

extern void fun();
void fun();

?上面的代码在使用extern和不使用extern关键字时的行为相同。

函数声明默认具有外部链接,因此将extern关键字添加到函数声明中没有区别,这是多余的。

两个语句的区别是:

extern void fun();

告诉编译器和链接器在另一个文件中的代码引用fun()时查看该文件,可能是通过调用fun();这个结果被称为"声明"。"

void fun ( ) {
  ...
}

定义了函数fun(),因为它是在这个文件中定义的,所以链接器不需要在其他地方寻找这个函数。

将函数声明为extern没有什么害处:链接器会做正确的事情。