1.#include 指令
#include <文件名>
按标准方式搜索,文件位于C++系统目录的include 子目录下
#include "文件名"
首先在当前目录中搜索,若没有,再按标准方式搜索
#include 指令可以嵌套使用,假设有一个头文件myhead.h, 该头文件中又可以有如下的文件包含命令:
#include "file1.h"
#include "file2.h"
2. #ifndef HEAD_H
#define HEAD_H
#endif
由于文件包含指令可以嵌套使用,在设计程序时要避免多次重复包含同一个头文件,否则会引起变量和类的重复定义。例如,某个工程包含下面四个源文件:
// main.cpp
#include "file1.h"
#include "file2.h"
int main(){
...
}
// file1.h
#include "head.h" .....
// file2.h
#include "head.h" ....
// head.h
#include "head.h"
class Point{
...
}
...
由于在main.cpp 中,head.h 被包含了两次,于是编译时系统会出现错误:类Point 被重复定义,如何避免呢?要在可能被重复 包含的头文件中使用条件编译指令,用唯一的标识符来标记是否已参加过编译,如果已参与过编译,说明程序段是被重复包含的,编译时忽略重复部分。将头文件"head.h" 改写成如下:
#ifndef HEAD_H
#define HEAD_H
class Point{
......
}
#endif
在这个头文件中,首先判断HEAD_H是否被定义过,若未定义过,说明此头文件尚未参加过编译,于是编译下面的程序段,并且对标识符HEAD_H 进行宏定义,标记此文件已经编译过.若标识符HEAD_H 被定义过,说明此头文件参加过编译,于是编译器自动忽略下面的程序段,这样便不会造成对类Point的重复定义.