美文网首页
关于头文件

关于头文件

作者: EVE0430 | 来源:发表于2018-01-25 14:37 被阅读0次

    本文根据http://www.cnblogs.com/chenchenluo/archive/2011/09/03/2165765.html,摘录并记录一些内容

    头文件的基本应用在前面<模块化编程学习>中有所提及,在这里对此进行细究


    存储类说明符
    Extern:
    出现在顶层或块的外部变量函数与变量声明中,表示声明的对象具有静态生存期, 连接程序知道其名字.
    Static:
    可以放在函数与变量声明中,在函数定义时,只用于指定函数名,而不将函数导出到链接程序,在函数声明中,表示其后边会有定义声明的函数,存储类型static.在数据声明中,总是表示定义的声明不导出到连接程序.

    根据上面所述,只要我们在头文件中用extern声明了一个函数play(),接下来无论在哪里调用,连接程序都可以找到。

    何时需要使用extern声明一个函数呢?

    在.h文件中声明的函数,如果在其对应的.c文件中有定义,那么我们在声明这个函数时,不使用extern修饰符, 如果反之,则必须显示使用extern修饰符.

    解释:在《C专家编程》中提过定义与声明的区别:
    定义:是一种特殊的声明,它创建了一个对象。
    声明:简单的说明了在其他地方创建的对象的名字,它允许你使用这个名字
    上面引用的话中,我认为意思仅仅为,在使用的.c文件中如果没有定义,则使用extern来表述。

    extern全局变量

    extern对象声明告诉编译器对象的类型和名字,对象的内存分配则在别处进行。由于并未在声明中为数组分配内存,所以并不需要提供关于数组长度的信息。这样做还有一个好处,在需要对全局变量的长度进行修改时,不用把所有的引用声明也全部修改了。

    宏定义的技巧

    比如a.h文件当中有:
    #ifdef AAA
    int i=0;
    #else
    int i;
    #endif
    那么,在a.c文件当中,有如下语句:
    ......
    #define AAA
    #include "a.h"
    ......
    而对于其他的任何包含a.h文件的头文件或者.c源文件,只需要直接包含a.h就行了
    ......
    #include "a.h"
    ......
    这样就可以达到在a.c文件当中定义变量一次,而在其他的文件当中声明该变量的目的.
    当然了,你完全可以根据自己的需要来决定在哪个需要包含a.h的文件当中定义宏AAA,但> 是我要说的是
    在同一个工程的不同的需要包含a.h的文件当中,你只能定义AAA一次,否则在连接这些目> 标文件时会出现
    重复定义的错误,即使你的单独目标文件编译没有任何的问题.

    相关文章

      网友评论

          本文标题:关于头文件

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