C++预处理
提示:本文参考自陆文周主编的Qt5 开发及实例
前言
C++预处理命令有三种,即宏定义命令、文件包含命令和条件编译命令。
生成规则:
1.在程序中均用“#”引导
2.每条预处理命令必须独占一行
3.行尾不允许有分号“;”
1.宏定义命令
#define可以定义一个符号常量,例如
#define PI 3.1415926
这就是宏定义命令,它将3.1415926用PI代替,PI称为宏名。
宏定义需要注意以下几点:
1). #define、PI、3.1415926之间一定要有空格,为了与普通标识符相区别,宏名通常被定义为大写。
2).宏被定义后,通常不允许再重新定义,只有当使用如下命令时才可以重新定义。
#undef 宏名
3).一个定义过的宏名还可以用于定义其他新的宏。
4). 宏还可以带参数,例如:#define MAX(a,b) ((a)>(b)?(a):(b))
,
其中(a,b)是宏MAX的参数表,如果在程序中出现下列语句:x = MAX(3, 9);
则预处理后变为:x = (3 > 9 ? 3 : 9);
,带参数的宏相当于一个函数的功能,但比函数简洁。
2.文件包含命令
指的是将另一个源文件的内容合并到源程序中。C++语言提供了#include命令用于实现文件包含的操作,它有如下两种格式:
#include <文件名>
#include "文件名"
文件名通常以“.h”为扩展名,因此将其称为"头文件"。
格式<>:包含由系统提供的并放在指定子目录的头文件;
格式"":包含由用户定义的放在当前目录或者其他目录下的头文件或其他源文件。
3.条件编译命令
一般情况下,源程序中所有的语句都参加编译。但有时也希望根据一定的条件去编译源文件的不同部分,即“条件编译”。条件编译使得同一源程序在不同的编译条件下得到不同的目标代码。C++提供的条件编译命令有下列几种常用的形式。
格式1:
#ifdef <标识符>
<程序段1>
[
#else
<程序段2>
]
#endif
其中,#ifdef、#else、和#endif都是关键字,<程序段>是由若干条预处理命令或语句组成的。含义:如果标识符已经被#define命令定义过,则编译<程序段1>,否则编译<程序段2>。
格式2:
#ifndef <标识符>
<程序段1>
[
#else
<程序段2>
]
#endif
含义:如果标识符没有被#define命令定义过,则编译<程序段1>,否则编译<程序段2>。