随着数字定义如图所示,这是硬度适中。但是,假设你有一个C99或更高版本的编译器,你可以用文字的化合物:
#define MYCHAR_1 0xC3
#define MYCHAR_2 0xB6
printf("%s", (char []){ MYCHAR_1, MYCHAR_2, '\0' });
如果你坚持C89,那么你可能没有任何其他好的选择,而不是定义数组变量并将其传递给函数。
如果你想有一个MY_MAGIC_MACRO(MYCHAR)的工作,那么你必须知道有(每个前缀,在这个例子中)有多少名:
#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终端在单独的线路上是ö
两次。
*您当然可以做到*'字符ouml [] = {MYCHAR_1,MYCHAR_2,0};' – 2014-10-02 14:01:51
OK,但我该如何使用,在功能? - 我对这个问题进行了澄清。 (顺便说一句,你就需要为无符号UTF-8字符) – 2014-10-02 14:19:12
您不必使用'无符号char'为UTF-8字符;任一'签署char'或纯'char'也是正确的,可使用的,等等。然而,在除了标准库的支持,所有方面'无符号char'将比一个可能(或绝对)更容易签署'char'表示。 – 2014-10-02 14:41:31