C/ c++宏扩展:从两个到四个参数
C/C++ Macro expansion : from two to four parameters
我正在尝试将两个参数宏转换为四个参数宏。从我不能改变LIST
的定义,我叫它ALL
,提供两个额外的参数
#define LIST(x)
x(p1, p2)
x(p3, p4)
x(...
#define ALL(A, B, C, D) .../... do stuff with A, B, C and D
这是我到目前为止尝试的:
#define RIGHT(C, D) C, D)
#define LEFT(A, B) (A, B, RIGHT
但是当我用LIST( ALL LEFT (q1, q2) )
I测试它(gcc -E text.cpp
)时得到以下错误:
错误:未终止的参数列表调用宏"ALL"
仔细看一下,原因如下:
-
LIST
被替换为第一行ALL LEFT (q1, q2)(p1, p2)
- 预处理器试图扩展
ALL
,但没有找到关闭括号,有错误…
LEFT
替换为ALL (q1, q2, RIGHT(p1, p2)
我该怎么做呢?
谢谢。编辑:
更精确地说,对于给定的输入:
#define LIST(x)
x("p1", "p2")
x("p3", "p4")
x("p5", "p6")
#define ALL(A, B, C, D) {A, B, C, D}
我想找一个方法得到,结果:
{"q1", "q2", "p1", "p2"}
{"q1", "q2", "p3", "p4"}
{"q1", "q2", "p5", "p6"}
我看到了两个答案:
1)在使用LIST时传入helper宏的名称:
#define to_all(c, d) ALL("q1", "q2", c, d)
LIST(to_all)
2)让LIST扩展为helper宏,它在使用时应该存在(这是x-macros的一种变体)。但是,这需要您重新定义list:
// Somewhere "central"
#define LIST()
LIST_HELPER("p1", "p2")
LIST_HELPER("p3", "p4")
LIST_HELPER("p5", "p6")
#define ALL(A, B, C, D) {A, B, C, D}
// When used:
#define LIST_HELPER(c, d) ALL("q1", "q2", c, d)
LIST()
#undef LIST_HELPER
相关文章:
- 找到四个 10 的所有表达式
- 如何在 c++ 中存储具有值的四个参数的元组
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 如何实现四个 i8 元素组的高效_mm256_madd_epi8点积
- 如何将无符号的 int 值解释为四个字母的单词?
- 如何让变量随机输出四个单词之一
- 如何校准相机焦距,平移和旋转给定四个点
- 这C++ unordered_map怎么有四个值?我以为这是一个键值对
- 我想将四个字节合并为一个数字以进行串行传输
- QT将MainWindow拆分为四个小部件
- 如何将文本文件的各个部分导入到四个不同的字符串
- Curl - 发送数百个请求,但一次只能发送四个 - 编程
- 连接四个C 下降功能无法正常工作
- 连接四个成功的组合检查适用于大多数情况,但不适用于某些情况
- 使用C randint生成四个数字
- 读取四个数据文件并使用函数将它们放入结构数组的最佳方法是什么
- 由四个C++声明符号组成的整个组的名称
- 使用 std::transform() 添加四个向量 c++
- 难以传递lower_bound第四个参数
- C/ c++宏扩展:从两个到四个参数