美文网首页C语言笔记
【C语言学习】extern关键字的作用是什么?

【C语言学习】extern关键字的作用是什么?

作者: 学以解忧 | 来源:发表于2019-08-29 14:54 被阅读4次

    extern关键字可以用来声明变量和函数作为外部变量或者函数供其它文件使用。

    extern声明变量

    示例程序:

    test.h如下:

    //声明
    extern int a;
    extern int b;
    

    test.c如下:

    #include "test.h"
    
    //定义
    int a = 520;
    int b = 1314;
    

    主函数所在的源文件为main.c,其代码如下:

    #include <stdio.h>
    #include "test.h"
    
    int main(void)
    {
     printf("a = %d , b = %d\n", a, b);
     
     return 0;
    }
    

    其中,a,b的声明也可放在main.c中,代码如下:

    #include <stdio.h>
    
    extern int a;
    extern int b;
    
    int main(void)
    {
     printf("a = %d , b = %d\n", a, b);
     
     return 0;
    }
    

    此时,就不需要包含test.h这个头文件了。

    extern声明函数

    示例程序:

    test.h如下:

    //声明变量
    extern int a;
    extern int b;
    
    //函数声明
    extern int add(int a, int b);  //extern关键字可要可不要
    

    test.c如下:

    #include "test.h"
    
    //定义
    int a = 520;
    int b = 1314;
    
    int add(int a, int b)
    {
     return a + b;
    }
    

    main.c如下:

    #include <stdio.h>
    #include "test.h"
    
    int main(void)
    {
     printf("a = %d , b = %d\n", a, b);
     printf("add(a, b) = %d\n", add(a, b));
     return 0;
    }
    

    同上,函数的声明也可以放在其被调用的源文件中,即:

    #include <stdio.h>
    
    //声明变量
    extern int a;
    extern int b;
    
    //函数声明
    extern int add(int a, int b);  //extern关键字可要可不要
    
    int main(void)
    {
     printf("a = %d , b = %d\n", a, b);
     printf("add(a, b) = %d\n", add(a, b));
     return 0;
    }
    

    程序运行结果为:

    image

    extern “C”

    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。

    因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略。

    示例代码:

    #ifndef __TEST_H   /*防止该头文件被重复引用*/
    #define __TEST_H
    
    #ifdef __cplusplus             
    extern "C"{
    
    #endif
    
    /*…*/
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif /*end of __TEST_H*/
    

    __cplusplus为C++定义的一个宏,此时extern “C”后的部分的代码按C语言的格式进行编译,而不是C++。

    以上是extern关键字的三种用法,如有错误,欢迎指出!


    关注我的微信公众号【嵌入式大杂烩】,回复:C语言,可获取C语言资料。
    关注我的个人博客【我的博客】查看更多笔记

    相关文章

      网友评论

        本文标题:【C语言学习】extern关键字的作用是什么?

        本文链接:https://www.haomeiwen.com/subject/jxuiectx.html