【C语言】调用另一个源文件中的函数需要用extern关键字申明吗?

比如:


a.c文件中:   
    double squ(double x)   
    {  
        return x*x;  
    }  

b.c文件中:  
    #include<stdio.h>  
    extern double squ(double x); //这里需要加extern吗?按照引用外部变量的规则应该加extern吧。  
    //测试发现可以不加,似乎更常见的做法是不加。是一种约定吗?有没有确定的做法?  
    int main()  
    {  
        printf("%f",squ(3.0));  
        return 0;   
    }    
阅读 25.4k
3 个回答

函数声明主要是给链接器一个明确的hint,从而在匹配函数名字以后还能检查一下类型是否正确。至于extern关键字,对于函数声明本身是无所谓的,反正末尾一个分号编译器就懂了,能识别出来这是个声明而不是定义;只是对于变量的声明,没它就不行。

C标准里是怎么要求的我不确定,不过建议是,对于本文件的函数不加extern,外部文件的加上,这样可以给读源码的人一个hint。

p.s. stdio.h里的函数声明都是有extern的。

你要搞清楚 extern 是干什么用的。它表示 external linkage。这个对于函数是默认的,所以可写可不写。对于变量则必须写。

你可以参数这个教程

一般来说,声明都是放在头文件里的,这样你不用在所有用到它的 .c 文件里都写上一大堆声明,而只需要引入一个头文件,也避免声明得和实现不一致(头文件通常和实现一起分发的)。

即便编译器足够聪明,能在object file找到函数,你也要用extern,这不仅是告诉编译器,更重要的是告诉别人,这个函数是外部函数

推荐问题
宣传栏