预编译处理

1、#include指令(文件包含指令)
方式:

  • #include :按标准方式搜索,文件位于系统目录的include子目录下,一般用于包含例如iostream之类的头文件
  • #include "filename":首先在当前目录搜索,若没有,再按标准方式搜索,一般用于包含自定义头文件

2、#define#undef指令
#define的作用:

  • 定义符号常量,例如:#define PI 3.14表示定义了一个符号常量PI的值为3.14
  • 声明定义,例如:#define __HEAD_H__表示在此处定义了_HEAD_H

#undef的作用:删除由#define定义的宏,使之失效

3、条件编译指令
只对满足条件的代码进行编译,将不满足条件的代码舍弃,以达到优化代码的目的

/*
当常量表达式constexpr_1非零时编译程序段codeSegment_1,
否则当常量表达式constexpr_2非零时编译程序段codeSegment_2,
若constexpr_1和constexpr_2都为零,则编译程序段codeSegment_3
*/
#if constexpr_1
    codeSegment_1
#elif constexpr_2
    codeSegment_2
#else
    codeSegment_3
#endif

/*
若标识符identifier已经被#define定义过,则编译程序段codeSegment_1,
否则编译程序段codeSegment_2
*/
#ifdef identifier
    codeSegment_1
#else
    codeSegment_2
#endif

/*
若标识符identifier未被#define定义过,则编译程序段codeSegment_1,
否则编译程序段codeSegment_2
*/
#ifndef identifier
    codeSegment_1
#else
    codeSegment_2
#endif

4、defined操作符
defined是一个操作符,不是指令,所以不需要以#开头,使用方式:defined(identifier)

作用:#ifndef __HEAD_H__等价于#if!defined(__HEAD_H__)

5、预编译处理在工程上的应用
通常在一个工程的头文件中会加上如下预编译指令,来防止重复包含重复定义

//head.h
#ifndef __HEAD_H__
#define __HEAD_H__

codeSegment

#endif

你可能感兴趣的:(预编译处理)