相关疑难解决方法(0)

macro:来自char literal的字符串文字

在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

c c-preprocessor

7
推荐指数
1
解决办法
1416
查看次数

在C中创建字符串,其中第一个字符为字符串长度

此问题与使用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)

而且编译器似乎不喜欢混合数字和字符串。

有什么办法吗?

c macros c-preprocessor

7
推荐指数
1
解决办法
122
查看次数

标签 统计

c ×2

c-preprocessor ×2

macros ×1