繁体   English   中英

C中的非ASCII字符

[英]Non-ASCII characters in C

我正在查看谷歌go的运行时源代码(在https://go.googlecode.com/hg/src/pkg/runtime/ ),似乎他们使用特殊字符作为其函数名称,·。 (例如, 访问https://go.googlecode.com/hg/src/pkg/runtime/cgocall.c )。 这是否被主要编译器接受? 它不是ANSI C,是吗? 或者它只是一些宏观魔法?

谢谢!

C90不允许标识符中的附加字符(超过基本字符集中的字符),C99(使用通用字符语法 - \\ uXXXX和\\ UXXXXXXXX - 以及实现定义的其他字符集)。

C99中的6.4.2.1/1:

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实现支持得多好,我知道Plan9 C编译器在标准化之前可以处理其他字符

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

C99标准 “允许”(对于足够小的“允许”值)“奇怪的字符”

5.1.1.2翻译阶段

1翻译语法规则的优先级由以下阶段指定。

  1. 物理源文件多字节字符以实现定义的方式映射到源字符集(如果需要,引入行尾指示符的换行符)。 Trigraph序列由相应的单字符内部表示替换。

使用该中间点在此处讨论:

http://code.google.com/p/go/issues/detail?id=793

基本上,使用该点不是规范的一部分,但在某些情况下有必要。 引导,运行时或汇编。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM