C++中使用#define的一些特殊用法
1.拼接字符串
#include <functional>
#include <iostream>
#define BUILD_INT_ADD 1
using func = std::function<void(int, int)>;
func f;
void add_int(int a, int b) { std::cout << a + b << std::endl; }
#define REGISTER_FUNC(X, x) \
{ \
if (BUILD_##X##_ADD) { \
f = &add_##x; \
} \
}
int main(int argc, char **argv) {
REGISTER_FUNC(INT, int);
f(10, 20);
return 0;
}
如上代码中#define
中的##
,这种当时通常在ffmpeg等c++库中看到。这里面的##
就是拼接字符串的作用。
2.加双引号
#include <iostream>
#define ADD_DOUBLE_QUOTATION_MARK(x) #x
int main(int argc, char **argv) {
std::cout <<ADD_DOUBLE_QUOTATION_MARK(chen) <<std::endl;
return 0;
}