[英]Unicode characters in C
C标准是否要求编译器能够处理未编码为ascii的文件? 特别是,我想知道utf-8文件是否符合标准。 上一个问题的答案在C89,C99和C11之间是否有所不同?
假设在C源文件中使用ASCII外部的字符是合法的,哪些用法合法?
我可以想到几个不同的用例:
这是一个显示所有四个的示例:
#ifdef PRINT_©
// Print out the © notice
cont char my©Notice[] = "This program is © 2016 ACME INC";
puts(my©Notice);
#endif
如果C允许非ASCII字符出现在上面列出的用法中,那么可能使用的代码点是否有任何限制?
请记住,这是关于C标准的问题。 我已经意识到将unicode字符放入标识符和宏将使代码更难以使用。
它的实现是定义的,因此不受标准的约束。
我知道至少有一个编译器,即clang
,它要求源是UTF-8。 但是其他编译器可能会使用其他要求,或者不允许它。
从C99开始,标识符允许包含多字节字符,但在C99之前,它将是允许非基本字符的扩展名。 C11扩展了允许的字符集。
对标识符中允许的字符有一些额外的限制,并且©不在列表中。 它在附录D中列出。这些是Unicode点,但这并不严格意味着文件中的编码必须是基于unicode的。
允许的字符范围
最初不允许使用字符范围
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.