一 extern 声明一个外部变量:
外部变量是指在调用点所在函数或者文件外部定义的全局变量。
二 extern 定义或声明外部函数:
外部函数的概念和外部变量类似,是指在调用点所在函数或者文件外部定义的函数。
a. 定义函数时,在函数返回值类型前面加上extern关键字,表示此函数是外部函数,可供其他文件调用。
c语言规定,定义函数时省略extern的,默认为外部函数。
b. 调用外部函数时,需要用extern对函数作出声明。
c语言规定,声明函数时,可以省略extern。
声明外部函数时,为什么可以省略extern呢?
因为 “声明外部函数”有两层含义,一是,声明函数;二是,外部函数。
那么,首先,声明函数,当然不需要extern呀,因为函数的声明和定义区别是很明显的。
外部函数,看样子,用extern关键字来告诉编译器这是声明一个外部函数是一个不错的选择。
那么,如果不用extern呢?编译器知道了此函数声明,然后在之前没有发现此函数的定义,自然就知道了这应该是一个外部函数了。所以,似乎不加extern也是可以的。
c/c++也真奇怪,规则定义得也太不严密了,为什么声明外部函数时可以加extern也可以省略呢?
个人觉得可能是为了与extern声明外部变量的用法保持一致。声明外部函数时,完全不用加extern,编译器自己就能知道的。但是为了保持与声明外部变量的用法一直就也允许用extern来声明了。