编译预处理

来源:互联网 发布:北宋出相 知乎 编辑:程序博客网 时间:2024/05/29 17:44

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的重复定义.

0 0
原创粉丝点击