c++ - 将 map 分配给 char*.. 这是如何工作的?(包括代码示例)
问题描述
我正在尝试使用一些现有代码,但遇到了我不太明白它是如何工作的代码:
char *c_token = R(
{
"1":"abcdef",
"2":"ghijkl",
"3":"mnopqr",
"4":"stuvwx"
});
其中 R() 定义为:
#define R(...) #__VA_ARGS__
之后的 c_token 缓冲区是什么样的?这样做比仅仅分配一个 map<string,string> 有什么好处吗?我正在尝试阅读代码,但老实说我不明白这是在做什么。
假设这是用来传递这张地图的,你如何将它翻译回另一端的地图?
解决方案
预处理器将括号之间的所有内容(包括逗号)转换为字符串文字。它几乎可以是完全的语法垃圾。例如:这很好。 R(!@#,*&#,(,));
作为一个实验,尝试:
#define R(...) "BEGIN" #__VA_ARGS__ "END"
这产生:"BEGIN!@#,*&#,(,)END"
并比较当你这样做时会发生什么:
#define R(x) "BEG" #x "END"
这会产生:"BEGIN!@#END"
带有警告,例如:
函数式宏调用“R”的参数太多
推荐阅读
- c# - Html Agility Pack 可以基于名称属性定位元素吗?
- python - 当键的数量与每个键的值的数量相比较小时,PySpark reduceByKey 会继续失败
- npm - 如何使用 Yarn 安装最新版本的 Next.js?
- python - 如何恢复用于生成给定哈希的字符串?
- node.js - 将 nodejs 缓冲区转换为 Uint16Array
- serial-port - 如何在 PYMODBUS(Modicon?)中塑造一个 CALL
- python - 将数据框中的列的行创建为另一个数据框中的列
- flutter - SnackBar 不显示
- google-sheets - 从其他行的组合创建行
- f# - 如何在 F# 的列表中仅保留“稳定”值