C ++预处理器连接操作

时间:2015-12-15 08:58:02

标签: c++ concatenation c-preprocessor

我想使用C ++预处理器连接器。

#include <iostream>
#include <string>

#define GetBlack(colorName) (color.##colorName)

struct Color
{
    int black = 0;
};

int main()
{
  Color color;
  int c = color.black;
  int d = GetBlack(black); 
}

我得到的错误是

  

5:35:错误:粘贴&#34;。&#34;和&#34;黑&#34;不提供有效的预处理令牌
  16:11:注意:扩展宏&#39; GetBlack&#39;

C ++外壳:
http://cpp.sh/3547x

任何提示?

1 个答案:

答案 0 :(得分:9)

你实际上并不想在这里连接。您只是将预处理“令牌”粘贴到位,因此只需使用:

#define GetBlack(colorName) (color.colorName)

宏参数名colorName已扩展到位。然后

int d = GetBlack(black);

将扩展为

int d = color.black;

连接是将两个“标记”合并为一个,请参阅here

例如,如果该成员名为black_value,但您只想调用GetBlack(black),那么宏定义将类似于:

#define GetBlack(colourName) colour.colourName##_value;