define宏定义
define是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本;
define <宏名> (<参数表>) <宏体>
操作符
- # :可将参数转化为字符串;
#include <iostream>
using namespace std;
# define print(xx , a , b) cout << #xx << a + b << endl;
int main()
{
print(加法:, 5 , 6);
}
编译输出:
加法:11
- ##:连接两个参数成为一个整体
#include <iostream>
using namespace std;
# define print(xx , a , b) cout << #xx << a##b << endl;
int main()
{
print(连接:, 5 , 6);
}
编译输出:
连接:56
-
\:具有续行的作用,下一行也是属于该宏定义;
-
条件定义
#ifndef RADIXUN_LOG_H__ //如果为定义
#define RADIXUN_LOG_H__
#endif
#ifdef xx //如果定义
#define xxxx
#else
#define xxxxx
#endif
- 取消宏定义
#undef xx
- 可变参数宏…和__VA_ARGS__
…:为参数列表中最后一项
# define print(xx , ... , xx) cout << #xx << __VA_ARGS__ << endl;//报错
#include <iostream>
using namespace std;
# define print(xx , ...) cout << #xx << __VA_ARGS__ << endl;
int main()
{
print(XXXX:, 555);
}
编译输出:
XXXX:555
- 常用:http解析
#define HTTP_METHOD_MAP(XX) \
XX(0, DELETE, DELETE) \
XX(1, GET, GET) \
XX(2, HEAD, HEAD) \
XX(3, POST, POST) \
XX(4, PUT, PUT) \
...
enum class HttpMethod {
#define XX(num, name, string) name = num,
HTTP_METHOD_MAP(XX)
#undef XX
INVALID_METHOD
};
逐步展开
enum class HttpMethod {
#define XX(num, name, string) name = num,
HTTP_METHOD_MAP(XX)
#undef XX
};
|
|
V
enum class HttpMethod {
#define XX(num, name, string) name = num,
XX(0, DELETE, DELETE),
XX(1, GET, GET),
XX(2, HEAD, HEAD),
XX(3, POST, POST),
XX(4, PUT, PUT),
#undef XX
};
|
|
V
enum class HttpMethod {
DELETE = 0,
GET = 1,
HEAD = 2,
POST = 3,
PUT = 4,
};