C++宏定义命令和条件编译命令

喜欢而已 提交于 2020-02-06 04:42:59

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   
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!