[英]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.