学习笔记

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

2019-04-26  本文已影响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语言】获取视频教程和电子书。

上一篇 下一篇

猜你喜欢

热点阅读