宏定义
常量替换
#define 标识符 替换表达式
C++中常用const方式进行常量替换
条件编译
可以定义一个空的宏来用于条件编译
#ifdef 宏名:若定义了对应宏则执行下面的宏指令#else:否则执行else下面的宏指令#undef 宏名:取消原来的定义#endif:条件编译的结尾
宏函数
#define 标识符(参数列表) 替换表达式
为了防止运算符优先级造成问题,一般要对表达式加上括号
C++中可以被内联函数取代
#与
- #将符号转为字符串
e.g.#define PRINT(a) cout<<#a<<"="<<(a)<<" ";
- ##将两个表达式连接在一起
e.g.#define MEMBER(type, a) type m_##a
多行宏定义
若想定义多行宏定义,则需要在每行结尾加一个
可变参的宏函数
#define 标识符(参数列表,...) 替换表达式
表达式中用__VA_ARGS__标识符表示这些参数,宏展开时,实际参数会替换掉该标识符
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#define LOG(fmt, ...) printf(fmt, ##__VA_ARGS__)
int main() {
LOG("Hello, %s\n", "World");
LOG("This is a test.\n");
return 0;
}