红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【C/C++】宏定义

宏定义

常量替换

#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;
}