C替代标记
C替代标记指一批C语言常见运算符的可选拼写。它们实现为C标准函数库中iso646.h
头文件内的一组宏(台湾作巨集)定义。此标记作为C90标准的修正案于1995年增补。
替代标记允许程序员使用C语言按位和逻辑运算符,原先的标记在一些国际和非QWERTY键盘上很难输入。根据ISO/IEC 646标准实现的头文件有一些区域性的变化,其中一些用重音字符替换了C运算符使用的标点符号。
宏(台湾作巨集)定义
在iso646.h
中定义了11个宏(台湾作巨集):
宏(台湾作巨集) | 定义为 |
---|---|
and |
&&
|
and_eq |
&=
|
bitand |
&
|
bitor |
|
|
compl |
~
|
not |
!
|
not_eq |
!=
|
or |
||
|
or_eq |
|=
|
xor |
^
|
xor_eq |
^=
|
C++
以上标识符全部是运算符关键字,因此不需要再包含头文件。为了兼容C语言,C++98标准提供了头文件<ciso646>
,但实际上这是个空文件[1]。然而在Microsoft Visual C++等编译器中,如果使用这些运算符关键字,就必须包含头文件。
头文件名称来源
iso646.h
的名称来源于意图兼容基于ISO/IEC 646字符集的键盘。ISO 646是1972年颁布的一项国际化的7位ASCII标准,规定了12个字符所对应的码位保持对各国标准开放:# $ @ [ \ ] ^ ` { | } ~
。
因此法国标准AFNOR NF Z 62010-1982把码位0x7c(ASCII码的 | )定义为ù,用法文键盘就难以输入C语言的位或运算符 | ;码位0x7e(ASCII码的 ~)定义为 ¨ (即分音符),法文键盘就难以输入C语言的位非运算符 ~ 。
加拿大法语标准CSA Z243.4-1985中把码位0x5e(ASCII码的 ^ )在定义为É,导致难以输入C语言的异或运算符 ^ 。
为解决上述的C语言源代码输入问题,C语言预处理器(C preprocessor)在扫描处理源文件时,使用三字符组替换为单个字符的办法。三字符组替换方法的可读性显然不如使用and、not
等关键字。
参见
参考
- ^ Lischner, Ray. C++ in a Nutshell. O'Reilly Media. 2003: 212. ISBN 0-596-00298-X.