gpt4 book ai didi

C 预处理器:将字符组合成字符串

转载 作者:行者123 更新时间:2023-12-05 04:16:52 25 4
gpt4 key购买 nike

我有一个字符定义列表,如下所示:

#define MYCHAR_1 0xC3
#define MYCHAR_2 0xB6

(这是构成 UTF-8 字符“ö”的两个字节)

是否可以创建一个采用前缀(在本例中为“MYCHAR”)并生成字符串“\xC3\xB6”的宏? (即“ö”)

换句话说,C 语言预处理器可以用静态数组元素创建静态字符串(或数组)吗?

最终结果应该可供以字符串作为参数的函数使用,例如:

printf(MY_MAGIC_MACRO(MYCHAR));

应该打印“ö”。

最佳答案

使用如图所示的数字定义,它的难度适中。但是,假设您有 C99 或更高版本的编译器,您可以使用复合文字:

#define MYCHAR_1 0xC3
#define MYCHAR_2 0xB6

printf("%s", (char []){ MYCHAR_1, MYCHAR_2, '\0' });

如果您坚持使用 C89,那么除了定义一个数组变量并将其传递给函数外,您可能没有任何好的选择。

如果你想让 MY_MAGIC_MACRO(MYCHAR) 工作,那么你必须知道有多少个名字(在这个例子中每个前缀 2 个):

#define MY_MAGIC_MACRO(x) ((char []){ x##_1, x##_2, '\0' })

printf("%s\n", MY_MAGIC_MACRO(MYCHAR));

#include <stdio.h>

#define MYCHAR_1 0xC3
#define MYCHAR_2 0xB6

#define MY_MAGIC_MACRO(x) ((char []){ x##_1, x##_2, '\0' })

int main(void)
{
printf("%s\n", (char[]){ MYCHAR_1, MYCHAR_2, '\0' });
printf("%s\n", MY_MAGIC_MACRO(MYCHAR));
return 0;
}

UTF-8 终端上的输出是ö,分行两次。

关于C 预处理器:将字符组合成字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26162439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com