在宏中连接转义序列字符串

时间:2016-03-25 17:39:29

标签: c++ macros

假设我想使用一个前缀为\x的宏,以便替换是一个有效的十六进制转义序列,如:

#define HEXIFY(s) "\x" s
...

std::cout << HEFIXY("48");

或者:

#define HEXIFY(s) "\x" #s
...

std::cout << HEXIFY(48);

将打印字符H(十六进制48)。

然而,这两个片段似乎都不起作用。有没有办法只使用宏来实现这个目标?

1 个答案:

答案 0 :(得分:2)

#include <iostream>
using namespace std;
#define str(s) #s
#define XHEXIFY(x,y) (str(x##y))
#define HEXIFY(y) XHEXIFY(\x,y)

int main()
{
    cout<<HEXIFY(48)<<endl;
    return 0;
}