C中的非ASCII字符

o7jaxewo  于 2023-03-28  发布在  其他
关注(0)|答案(4)|浏览(205)

我在看google go的运行时源代码(在https://go.googlecode.com/hg/src/pkg/runtime/),似乎他们使用了一个特殊的字符作为他们的函数名,· .(例如在https://go.googlecode.com/hg/src/pkg/runtime/cgocall.c).这在主要的编译器中被接受吗?它不是ANSI C,是吗?或者它只是一些宏魔术?
谢谢大家!

5vf7fwbs

5vf7fwbs1#

C90不允许在标识符中添加额外的字符(在基本字符集的基础上),C99允许(使用通用字符语法- \uXXXX和\UXXXXXXXX -以及实现定义的其他字符集)。
6.4.2.1/1 中的www.example.com:

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined characters
nondigit: one of
    _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

我不知道C实现对它的支持有多好,我知道Plan 9 C编译器在标准化之前可以处理其他字符。

mzaanser

mzaanser2#

你是说那个点吗?它是ISO 8859-1(ISO Latin-1)中的字符代码183-它是一个扩展的ASCII代码,对应于格鲁吉亚逗号,也就是“中间点”。它实际上是一个法律的字符。

idfiyjo8

idfiyjo83#

The C99 Standard“允许”(对于足够小的“允许”值)“陌生字符”
5.1.1.2 www.example.com
1翻译的语法规则之间的优先级由以下阶段指定。
1.物理源文件的多字节字符被Map,以实现定义的方式,到源字符集(为行尾指示符引入新行字符)(如果需要)。三字母序列被相应的单字符内部表示替换。

2skhul33

2skhul334#

使用中间的点在这里讨论:
http://code.google.com/p/go/issues/detail?id=793
基本上,使用那个点并不是规范的一部分,但是在某些情况下它是必要的。引导、运行时或汇编。

相关问题