在C中是否有办法使用宏从字符文字创建字符串文字?
比如我有
'a'
Run Code Online (Sandbox Code Playgroud)
我想创建字符串文字
"a"
Run Code Online (Sandbox Code Playgroud)
澄清问题:
#define A 'a'
write(fd, "x=" CHAR2STRING(A) "\n", 4);
Run Code Online (Sandbox Code Playgroud)
我的问题是如何定义宏CHAR2STRING
此问题与使用charliteral的Concatenate字符串文字有关,但稍微复杂一些。
我想创建一个字符串文字,其中字符串的第一个字符是字符串的长度,第二个字符是常量。这是当前的操作方式:
const char myString[] =
{
0x08,
SOME_8_BIT_CONSTANT,
'H',
'e',
'l',
'l',
'o',
0x00
};
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想将其替换为:
const char myString[] = BUILD_STRING(0xAA, "Hello");
Run Code Online (Sandbox Code Playgroud)
我试过这样实现:
#define STR2(S) #S
#define STR(S) STR2(S)
#define BUILD_STRING(C, S) {(sizeof(S)+2), C, S}
const char myString[] = BUILD_STRING(0xAA, "Hello");
Run Code Online (Sandbox Code Playgroud)
但它扩展为:
const char myString[] = {(sizeof("Hello")+2), 0xAA, "Hello"};
Run Code Online (Sandbox Code Playgroud)
而且编译器似乎不喜欢混合数字和字符串。
有什么办法吗?