每当你无脑流地输入#include<stdio.h>的时候,是否曾有过那么一瞬间,在某个神秘空间闪出个问号?
难不成这是一句暗语:井边,有个银粗鲁的喊<收徒弟哦,电焊!>。
老师这时会向你提出严正交涉:别胡扯,这玩艺叫“引入头文件”。
#代表这是个预处理指令,就是要在编译前预先处理的指令。include译为“包含”。<>中的内容是包含的东西。用过window系统的都知道,xxx.xxx形式表示这是一个文件。因为这个文件是在程序开头位置引入的,所以叫“头文件”。
#include<stdio.h>指当前程序要引入一个名为“stdio.h”的头文件。
引入头文件的主要目的是要使用别人写好的程序,比如引入“stdio.h”就可以使用人家编好的功能:在小黑窗口上打印东东的函数printf。
具体说来,头文件里的内容主要有两样:
1.函数的声明。注意只是函数的声明(声明函数输入啥输出啥),而不是函数的定义(函数的实现代码)。它就像餐厅的菜单,告诉你都有哪些菜(函数),但菜怎么做的(函数体)得去厨房(源文件)看。不幸的是,那些编译器写好的函数我们是看不到厨房里的做菜过程的,因为这些函数是定义在库中的(这些库编译时用不上,而在连接时才会用上),是对我们完全隐身了的。因此我们可以使用printf函数打印,却无法看到它的源代码。它就像电饭包的“说明书”,告诉你怎么使用,却不会告诉你它是怎么煮饭的。
2.宏定义。宏的本质就是用A替换B,常用一小段代码代替一大段代码,相当于给重量级的代码找个轻功好的替身。在头文件这张说明书里会清楚地展示出它们之间的替代关系。