这是一道关于C++宏的题,出乎意料的结果?

问题描述 投票:0回答:1
#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"

c++ c-preprocessor
1个回答
0
投票

由空格分隔的相邻字符串文字由编译器连接在一起。所以:

"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"
,因为 逗号运算符 的工作方式。

© www.soinside.com 2019 - 2024. All rights reserved.