#include <iostream>
using namespace std;
#define _VA_ARG_LIST2(t, a) t a
#define _VA_ARG_LIST4(t, a, b, c) \
_VA_ARG_LIST2(t, a), _VA_ARG_LIST2(b, c)
int main() {
cout << _VA_ARG_LIST4("A", "a", "B", "b"); // 输出 Aa
return 0;
}
我想要得到的结果是
"A a","B b"
,但是我只有"Aa"
,我不知道怎么了
我想知道为什么结果是
"Aa"
由空格分隔的相邻字符串文字由编译器连接在一起。所以:
"A" "a"
变成"Aa"
,"B" "b"
变成"Bb"
,等等
试试这个:
#define _VA_ARG_LIST2(t, a) t " " a
这样,
_VA_ARG_LIST4("A", "a", "B", "b")
将扩展为 "A" " " "a", "B" " " "b"
,从而加入 "A a", "B b"
。
话虽这么说,请注意,
cout << "A a", "B a";
将仅显示 "A a"
,因为 逗号运算符 的工作方式。