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;
}
posted @ 2021-04-10 18:28  cyssmile  阅读(281)  评论(0编辑  收藏  举报