3、include
在我们写的第一段代码中,我们使用了一个函数printf()
,为什么我们看不到这个函数的函数体呢?函数体不在那段代码里,那么编译器是怎么找到它的呢?
我们不知道printf()
是怎么实现的,但是知道它的函数体在一个文件里,文件名称是stdio.h
,是C语言标准库中的标准输入输出库,它提供键盘输入和屏幕输出的支持。第一行的代码#include<stdio.h>
就起到把文件stdio.h
内的代码粘贴到当前代码中的作用。头文件的.h
中的h
是header
的缩写。
我们做几个测试,以了解#include
的基本功能
测试1:
//创建源文件myTest01.c
#include"myHeader.h"//包含头文件
int main(void)
{
headerTest();//调用函数
return 0;
}
//创建头文件myHeader.h
#include<stdio.h>
void headerTest()
{
printf("helloworld");
}
调试结果:helloworld
测试2
//创建头文件myHeader01.h
printf("I am header01\n");
//创建头文件myHeader02.h
printf("I am header02");
//创建源文件myTest02.c
#include<stdio.h>
int main(void)
{
#include"myHeader01.h";
#include"myHeader02.h";
return 0;
}
调试结果:
I am header01
I am header02
测试3
//创建头文件myHeader01.abc
printf("I am header01\n");
//创建头文件myHeader02.abc
printf("I am header02");
//创建源文件myTest02.c
#include<stdio.h>
int main(void)
{
#include"myHeader01.abc";
#include"myHeader02.abc";
return 0;
}
调试结果:
I am header01
I am header02
结论:
测试1和测试2说明了#include的本质相当于粘贴操作,将指定的文件里的内容粘贴到当前文件的当前行中。测试3说明了,对于任意格式(后缀)的文件,只要内容没错,就都是有效的。多个文件可以进行多重包含,这是一个相当灵活的功能。
你可能发现了,我们包含头文件用了两种符号< >
和“ ”
,这两者的区别在于,使用尖括号< >
,编译器会到系统路径下查找头文件;而使用双引号" "
,编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。所以我们完全可以使用双引号“ ”
来包含标准头文件,但不建议,我们建议用尖括号< >
引用标准头文件,用双引号“ ”
引用自定义头文件。
为什么C语言不内置输入和输出?因为并非所有的程序都要用到输入输出功能,轻装上阵体现了C语言的哲学,正式这种经济使用资源的原则,使得C语言成为流行的嵌入式编程语言。
以#
开头的,叫做预处理命令。关于预处理命令的更多用法,将来会细讲。
4、总结
- 除非是插在函数体中的语句,预编译命令通常都写在首部。事实上只要写在主函数体之外都是可以的,但是最好养成良好规范的习惯。
- 函数体所有代码必须包含在大括号
{ }
之内。 - 不论是变量的声明,赋值,还是函数的调用,都是一条语句,语句均以分号
;
结尾。同一条语句最好单独占一行。 - 不同关键字/标识符之间以空格隔开,也可以用回车分开,但是不便于阅读。同一关键字/标识符不可分开。
例如:
int
main(void)
{
//函数体
}
这样在语法上也是对的,但不建议。
- 注释:注释是对代码的解释,注释不参与编译,只是为了便于阅读。养成写注释的习惯,对写复杂的代码有好处。注释的格式如下:
//注释内容
/*
注释内容
注释内容
注释内容
*/
网友评论