C/C++预编译指令和条件编译

1. 常见的预编译指令和条件编译项有如下这些: 

#define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif

1 #define            定义一个预处理宏
2 #undef            取消宏的定义
3 #if                   编译预处理中的条件命令,相当于C语法中的if语句
4 #ifdef              判断某个宏是否被定义,若已定义,执行随后的语句
5 #ifndef            与#ifdef相反,判断某个宏是否未被定义
6 #elif                若#if, #ifdef, #ifndef等条件不满足,则执行
7 #else              与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行
8 #endif             #if, #ifdef, #ifndef这些条件命令的结束标志.
9 defined          与#if, #elif配合使用,判断某个宏是否被定义

2. #define介绍

#define MACRO_NAME[args] [tokens]

定义一个宏,args(参数)和tokens(标记)都是可选的,比如,

#define PI 3.14

#define DEBUG

没有标记的宏,默认值是 1,

之后出现的MACRO_NAME将被替代为所定义的标记

宏定义,按照是否带参数通常分为对象宏、函数宏两种。
对象宏: 不带参数的宏被称为"对象宏(objectlike macro)"。对象宏多用于定义常量、通用标识。例如:

// 常量定义
#define MAX_LENGTH 100
// 通用标识,日志输出宏
#define SLog printf
// 预编译宏
#define _DEBUG

函数宏:带参数的宏。例如

// 最小值函数
#define MIN(a,b) ((a)>(b)? (a):(b))
// 安全释放内存函数
#define SAFE_DELETE(p) {if(NULL!=p){delete p; p = NULL;}}
原文地址:https://www.cnblogs.com/yulei0713/p/12803377.html