美文网首页十天学会C语言
第10天C语言(09):文件包含-注意点

第10天C语言(09):文件包含-注意点

作者: liyuhong | 来源:发表于2017-07-14 09:46 被阅读12次
    一、概念
    /*
     #include ""
        "" 先会在当前文件查找, 找不到再去编译器环境下查找,找不到再去系统的环境下查找
      #include <>
        <> 先去编译器环境下查找,找不到再去系统的环境下查找
     
     作用: 
        将""或者<>中的内容完全拷贝过来
     注意:
        如何正确编写.h文件
            添加头文件卫士 防止循环导入
            #ifndef __ZS__H__   // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
            #define __ZS__H__   // 定义一个叫 __ZS__H__ 的宏
            #endif
            官方
             #ifndef ls_h
             #define ls_h
             #endif
        如果防止循环拷贝 (A 拷贝 B , B拷贝 A)
            只允许一方拷贝 (另一方只做声明)
        间接拷贝问题
            A 拷贝 B, B拷贝C, C拷贝 D
     */
    
    二、代码
    #include <stdio.h>
    //#include "zs.h" // int sum(int v1, int v2);
    #ifndef __ZS__H__   // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
    #define __ZS__H__   // 定义一个叫 __ZS__H__ 的宏
    
    // 加法运算
    // v1 ,v2 需要参与运算的数据
    int sum(int v1, int v2);
    #endif
    
    // 函数可以重复声明, 但不能重复定义
    //void text();
    //void text();
    //void text();
    //#include "zs.h" // int sum(int v1, int v2);
    #ifndef __ZS__H__   // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
    #define __ZS__H__   // 定义一个叫 __ZS__H__ 的宏
    // 加法运算
    // v1 ,v2 需要参与运算的数据
    int sum(int v1, int v2);
    #endif
    
    // 重复导入会降低编译效率
    #include "zs.h" // zs 导入了 ls的文件 这种就是间接拷贝
    //#include "ls.h"
    
    int main()
    {
    //    printf("sum = %i\n",sum(10, 22));
        printf("minus = %i\n",minus(30, 20));
        return 0;
    }
    void text()
    {
        printf("000\n");
    }
    >>> zs.h
    // 为了防止重复导入, 一般情况下会在.h中添加上 头文件卫士
    
    //#ifndef __ZS__H__   // 判断是否没有定义了名称叫做 __ZS__H__ 的宏
    //#define __ZS__H__   // 定义一个叫 __ZS__H__ 的宏
    
    // 加法运算
    // v1 ,v2 需要参与运算的数据
    int sum(int v1, int v2);
    #include "ls.h" // (拷贝ls.h)
    /*
     #include "ls.h" 相当于把ls.h的东西 都拷贝过来
     int minus(int v1,int v2);
     int sum(int v1, int v2); // 只做zh.h的声明
     */
    //#endif
    
    >>> zs.c
    #include "zs.h"
    
    int sum(int v1, int v2)
    {
        // 先用 v1 - v2 然后再加上 v1
        int res = minus(v1, v2);
        return res + v2;
    }
    
    >>> ls.h
    //#ifndef ls_h
    //#define ls_h
    
    // 减法运算
    // v1 ,v2 需要参与运算的数据
    int minus(int v1,int v2);
    //#include "zs.h" // (循环拷贝) #include nested too deeply
    int sum(int v1, int v2); // 只做zh.h的声明
    
    //#endif /* ls_h */
    
    >>> ls.c
    #include "ls.h"
    
    int minus(int v1,int v2)
    {
        
        // 先将两个数相加, 然后再减去v2
        int res = sum(v1, v2);
        
        return res - v2;
    }
    
    

    循环引用

    image.png image.png

    jie'j
    解决循环

    image.png image.png

    相关文章

      网友评论

        本文标题:第10天C语言(09):文件包含-注意点

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