如何将枚举常量的数值放入 C 中的字符串中?

问题描述 投票:0回答:1

我需要一种方法将枚举常量的数值作为单个字节放入字符串常量中(在编译时)。

enum
{
    SPECIAL_CHAR = 230
};

const char *str = "hello" ENUM_TO_STR_BYTE(SPECIAL_CHAR) "world";

我希望内存中的结果字符串

str
看起来像这个字符串:
"hello\xE6world"

如何编写宏

ENUM_TO_STR_BYTE

当然可以通过用单个字符初始化字符串来完成,但这对于较长的字符串来说非常不方便

const char str[] = { 'h', 'e', 'l', 'l', 'o', SPECIAL_CHAR, 'w', 'o', 'r', 'l', 'd', '\0' };
c string enums c-preprocessor
1个回答
0
投票

一个拼凑是:

#define MakeIt(A, B, C) ((const char *) &(struct { const char a[sizeof A - 1], b, c[sizeof C]; }){A, B, C})

const char *str = MakeIt("hello", SPECIAL_CHAR, "world");

使用

const char
访问结构符合 C 2018 6.5 7 中的别名规则,因为它们允许使用字符类型访问任何对象。 C 标准允许实现在结构成员之后插入填充,但没有实际的 C 实现在
char
成员或
char
数组之间插入填充。

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