(1)头文件保护符
在程序中经常会包含多个头文件,有时也会有自己编写的头文件,而自己写的头文件有时因为需要又会包含其他头文件,这样,在一个包含这些头文件的程序中,同一个头文件可能会被包含多次,有可能会造成程序不能正常工作。因此有了头文件保护符的概念。
头文件保护符依赖于预处理变量,预处理变量有两种状态:已定义和未定义。
#define
指令把一个名字设定为预处理变量;
#ifdef
当且仅当变量已定义时为真;
#ifndef
当且仅当变量未定义时为真。
一旦检查结果为真,执行后续操作直到遇到#endif
指令为止。
因此在头文件中保持这样的格式就能防止重复包含的发生:
/**这里假定头文件名为header_protector.h
**头文件保护符为HEADER_PROTOR_H
**/
#ifndef HEADER_PROTECTOR_H
#define HEADER_PROTECTOR_H
//这里为头文件中不能被重复定义的内容
#endif
//这里为头文件中其他部分的内容
第一次包含header_protector.h时,#ifndef
的检查结果为真,头文件被包含,HEADER_PROTOR_H变为已定义。后面如果再次包含header_protector.h时,#ifndef
到#endif
之间的部分被忽略。
这里有几点注意事项:
1.整个程序中的预处理变量和头文件保护符必须唯一,通常做法是基于头文件中类的名字来构建保护符的名字(这时类的定义在头文件中处于不能被重复定义的部分),以确保其唯一性。
2.为了避免与程序中其他实体发生名字冲突,一般吧预处理变量的名字全部大写。
3.养成一个良好的习惯:头文件即使(目前还)没有被包含在任何其他头文件中,也应设置保护符。
我的理解大概就是这样,因为还没有投入大量实际的操作,因此有些地方可能理解的不到位,参考一些IDE中现成的头文件,这方面的应用还是蛮复杂的,所以具体的方法论请自行在实践中完善。