头文件、源文件及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语言】获取视频教程和电子书。
网友评论