首页 > 解决方案 > 将 map 分配给 char*.. 这是如何工作的?(包括代码示例)

问题描述

我正在尝试使用一些现有代码,但遇到了我不太明白它是如何工作的代码:

char *c_token = R(
{
  "1":"abcdef",
  "2":"ghijkl",
  "3":"mnopqr",
  "4":"stuvwx"
});

其中 R() 定义为:

#define R(...) #__VA_ARGS__

之后的 c_token 缓冲区是什么样的?这样做比仅仅分配一个 map<string,string> 有什么好处吗?我正在尝试阅读代码,但老实说我不明白这是在做什么。

假设这是用来传递这张地图的,你如何将它翻译回另一端的地图?

标签: c++cvariadic-functions

解决方案


预处理器将括号之间的所有内容(包括逗号)转换为字符串文字。它几乎可以是完全的语法垃圾。例如:这很好。 R(!@#,*&#,(,));

作为一个实验,尝试:

#define R(...) "BEGIN" #__VA_ARGS__ "END"

这产生:"BEGIN!@#,*&#,(,)END"

并比较当你这样做时会发生什么:

#define R(x) "BEG" #x "END"

这会产生:"BEGIN!@#END"带有警告,例如:

函数式宏调用“R”的参数太多


推荐阅读