美文网首页学习笔记
面向小白的C语言教程(004)-头文件、源文件及include的

面向小白的C语言教程(004)-头文件、源文件及include的

作者: 爱学习的老周 | 来源:发表于2019-04-26 23:07 被阅读14次

    头文件、源文件及include的使用

    头文件,英文是head,文件后缀是.h,头文件是源文件的辅助文件,一般把一些变量,函数定义放到头文件,将函数的实现放到源文件。#include是预编译指令,可以把其它文件包含到当前文件中,预编译指令一般不加分号,加了也不影响执行,但习惯不加。

    1、#include预编译指令可以将其它文件中的函数片段包含到当前文件

    //创建头文件test01.h
    printf("我是test01");
    
    //创建源文件include_test.cpp
    #include<stdio.h>
    void main() {
        printf("我是主函数");
        //反斜杠是转义字符,\n是换行符,相当于回车的功能
        printf("\n");
        #include"test01.h"
    }
    

    这里的调试结果为:

    我是主函数
    我是test01
    

    这里可以看出,test01.h的代码片段穿插到了include_test.cpp中,穿插位置是#include”test01.h”,这是预编译指令#include的功能之一。

    2、可穿插的不仅仅是头文件,可以是.txt、.cpp、及任意自定义格式的文件。

    //新建头文件test02.txt
    printf("我是test02");
    
    //新建头文件test03.laozhou
    printf("我是test03");
    
    //将源文件include_text.cpp修改为:
    #include<stdio.h>
    void main() {
        printf("我是主函数");
        printf("\n");
        #include"test01.h"
        printf("\n");
        #include"test02.txt"
        printf("\n");
    #include"test03.laozhou"
    }
    

    调试结果如下:

    我是主函数
    我是test01
    我是test02
    我是test03
    

    3、将自定义函数和变量放到头文件里

    我们写一个加法函数:

    #include<stdio.h>
    void main() {
        int a = 10;
        int b = 20;
        int c;
        c = a + b;
        printf("%d",c);//意味着将c的值以十进制的形式打印出来
    }
    

    调试结果为:

    30
    
    

    我们可以把变量a、b、c放到头文件中:

    //新建头文件addFunction01.h
    int a = 10;
    int b = 20;
    int c;
    
    

    我们将主函数改为:

    #include<stdio.h>
    void main() {
        /*int a = 10;
        int b = 20;
        int c;*/
        c = a + b;
        printf("%d", c);//意味着将c的值以十进制的形式打印出来
    }
    
    

    此时编译是无法通过的,因为当要用到某个头文件里的变量或函数时,需要用预编译指令将其包含,即在顶部加上一条#include”addFunction01.h”,然后编译可以通过,调试结果为30.

    我们将c = a + b这条加法的执行代码也放到头文件addFunction01.h中,此时需要在头文件中添加一个函数:

    int a = 10;
    int b = 20;
    int c;
    void add() {//函数名为add
        c = a + b;
    }
    
    

    主函数改为:

    #include<stdio.h>
    #include"addFunction01.h"//包含自定义头文件
    void main() {
        /*int a = 10;
        int b = 20;
        int c;*/
    //  c = a + b;
        add();//调用函数
        printf("%d", c);//意味着将c的值以十进制的形式打印出来
    }
    
    

    调试结果:

    30

    我们还可以将变量和函数分开包含到两个头文件中:

    //将头文件addFunction01.h改为:
    int a = 10;
    int b = 20;
    int c;
    
    
    //新建头文件addFunction02.h:
    #pragma once
    void add() {
        c = a + b;
    }
    
    

    此时会报错,提示a、b、c均为未定义标识符。这是因为这三个变量是在另外一个头文件中定义的,需要包含进来:

    //新建头文件addFunction02.h:
    #pragma once
    #include"addFunction01.h"
    void add() {
        c = a + b;
    }
    
    

    我们将主函数include_test.cpp改成:

    #include<stdio.h>
    #include"addFunction02.h"
    void main() {
        add();
        printf("%d", c);//意味着将c的值以十进制的形式打印出来
    }
    
    

    调试结果为:

    30

    3、变量不可以重复定义

    如果我们在主函数里面加上:

    int a = 10;
    int b = 20;
    
    

    就会报错,”重定义“,这说明:

    1、同一个变量不可以重复定义

    2、包含的头文件里已经定义了变量,即意味着当前文件里已经定义了变量,再次定义相同的变量时,就会报错。

    3、多重包含是有效的,即文件A包含在文件B中,文件B包含在文件C中,即意味着文件A已经包含在了文件C中,结合第2点,可以推理出,如果A定义了变量,那么C不可以直接包含A,否则会报错:变量重复定义。

    可以证明这一点:

    //我们将主函数include_test.cpp改成
    #include<stdio.h>
    #include"addFunction02.h"
    #include"addFunction01.h"//报错
    void main() {
        add();
        printf("%d", c);//意味着将c的值以十进制的形式打印出来
    }
    
    

    这里多加了包含头文件addFunction01.h,会报错:a、b重定义,这是因为addFunction02.h包含了addFunction01.h,而include_test包含了addFunction02.h,即意味着include_test已经包含了addFunction01.h,而addFunction01.h中定义了变量a、b,重复包含变量就会重复定义,所以会报错。

    关注微信公众号axxd_lz回复【C语言】获取视频教程和电子书。

    相关文章

      网友评论

        本文标题:面向小白的C语言教程(004)-头文件、源文件及include的

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