当程序很复杂或由很多函数组成时,要在一个源文件中处理众多函数会变得很困难。这时,就需要将这些函数分入多个源文件(".cpp"文件,在codeblock中),每一个源文件包含一组相关函数。 由程序的一小部分组成的较小源文件成为模板。
同一模块中的函数功能比较类似,联系密切;不同模块联系尽可能小。
一个模块中的变量,在其他函数中不需要知道其存在,这样的变量可以设置成模板内的内部状态,实现“模板内共享而与模板外无关”
一个模块可能要调用其他模板内的函数和本程序自己定义的类型和符号常量。方便起见,会把所有符号常量、类型定义、和函数原型声明写在一个头文件中(及“.h”文件),让每一个模板include这个头文件。 同时,为了避免每一个模板include头文件,使得头文件中的声明在整个程序中重复出现,编译器判定重复定义的问题,需要使用一个新的编译预处理命令
#ifndef 标识符 …… #endif这个预处理命令表示,如果指定的标识符没有被定义,则执行后续语句,知道#endif;如果已经被定义,则跳过后续语句,直接跳到#endif。 因此,这一对预处理命令又被称为头文件保护符。所以所有头文件都有以下结构
//_name_h头文件名(不包括后缀) #ifndef _name_h #define _name_h 头文件真正需要写的内容 /*例如 #include <iostream> using namespace std; void turn(int n);*/ #endif头文件的实例:万能头文件(#include) <bits/stdc++.h>
函数的原型、函数使用的符号常量,自定义类型。 这部分用户需要知道的内容被称为库的接口,被表示为头文件(.h文件)
函数的实现等 用户不需要知道的内容,被表示为源文件。
一般,库的实现文件与头文件名字相同,(turn.cpp和turn.h)