1. 概念
宏定义命令和条件编译命令是都是预处理命令的一种
- 预处理命令:C++以#为开头的命令
- 解释:C++编译系统包含一个附加的编译预处理程序,在cpp正式被编译前,首先进行预处理。读取和识别程序中的预处理命令,并按预处理命令对编译的程序进行制定的预处理
预处理命令包含:文件嵌入命令、宏定义命令和条件编译命令
文件嵌入命令就是我们常用的include,这里只说一句
#include <A>
#include "A"
<>先从系统提供的include目录中搜索,系统提供的用<>
""先从当前目录中查找,再去include目录搜索,自己写的用"",减少搜索时间
2. 宏定义命令
宏定义命令又称宏替换命令,功能是用一个称为宏名的标识符代表一段字符串,#undef为取消宏定义命令
#define 宏名 宏替换体
#undef 宏名
例子
#define PI 3.1415926
#undef PI
#define PI 3.14
#define OUTPUT std::cout<<"test\n"
int main(int argc, char* argv[]){
std::cout<<PI<<std::endl;
OUTPUT;
}
3. 条件编译命令
条件编译命令可以决定哪部分程序编译,哪部分程序不编译
有这么几种写法:
- #if 和 #endif
- #ifdef 和 #endif
- #ifndef 和 #endif
- #elif #else 和 #endif
- #error
其实就是if 、if define 、if not define的简称。不管写哪个,请用#endif做结尾
#if系列用法
常量表达式非0时,程序段参加编译;为0时,程序段不参加编译
#if 常量表达式
程序段
#endif
if后为真编译第一段,elif后为真编译第二段,都为假编译第三段
#if 常量表达式
程序段1
#elif 常量表达式
程序段2
#else
程序段3
#endif
#ifdef用法
标识符已经是一个定义过的宏名,则程序段参加编译,否则不参加编译
#ifdef 标识符
程序段
#endif
#ifndef用法(重要)
标识符没定义过,则程序段参加编译,否则不参加编译
#ifndef 标识符
程序段
#endif
这个命令经常被使用,这条命令让我们单独写篇文章ifndef的用法
#error用法
用于发现错误,在错误的那一行会跳出编译过程
#error后面只是一个人为提示的字符串,请自行定义
#include<iostream>
#define WHITE 0
#define BLACK 1
#define RED 2
#define color RED
int main(int argc, char* argv[]){
#if color == WHITE
std::cout<<"white"<<std::endl
#elif color == BLACK
std::cout<<"BLACK"<<std::endl
#else
#error color is wrong
#endif
}
来源:CSDN
作者:绿竹巷人
链接:https://blog.csdn.net/weixin_42156097/article/details/104185680