Alternative operators and tokens
C源代码可以使用任何包含
ISO 646:1983
不变字符集的8位字符集编写,甚至包括非ASCII字符集。然而,部分C运算符和标点符号需要ISO 646字符集之外的字符:
{, }, [, ], #, \, ^, |, ~
。为了能在某些或全部这些符号不存在的字符编码(例如德国的
DIN 66003
)中使用这些符号,存在两种解决方案:使用这些字符的运算符替代拼写方式,或使用两个或三个ISO 646兼容字符的特殊组合,这些组合会被解释为单个非ISO 646字符。
目录 |
运算符宏 (C95)
对于使用非ISO646字符的运算符存在替代拼写,这些在 <iso646.h> 中作为宏定义:
|
定义于头文件
<iso646.h>
|
|
| 主要形式 | 替代形式 |
&&
|
and
(运算符宏) |
&=
|
and_eq
(运算符宏) |
&
|
bitand
(运算符宏) |
|
|
bitor
(运算符宏) |
~
|
compl
(运算符宏) |
!
|
not
(运算符宏) |
!=
|
not_eq
(运算符宏) |
||
|
or
(运算符宏) |
|=
|
or_eq
(运算符宏) |
^
|
xor
(运算符宏) |
^=
|
xor_eq
(运算符宏) |
字符 & 和 ! 在 ISO-646 标准下保持不变,但为使用这些字符的运算符仍提供了替代形式,以适应更为严格的历史字符集。
不存在相等运算符 == 的替代拼写(例如 eq ),因为字符 = 在所有支持的字符集中都存在。
替代记号 (C95)
以下替代标记是核心语言的一部分,在语言的所有方面,每个替代标记的行为与其主标记完全相同,除了拼写不同( 字符串化运算符 可使拼写可见)。双字母替代标记有时被称为"二合字母"(尽管由四个字符组成的 % : % : 也被视为二合字母)。
| 主要形式 | 替代形式 |
|---|---|
{
|
<%
|
}
|
%>
|
[
|
<:
|
]
|
:>
|
#
|
%:
|
##
|
%:%:
|
三字符组 (在C23中移除)
以下三字符组(三连符)在 识别注释和字符串字面量之前被解析 ,每个三连符的出现都会被替换为对应的主字符:
| 主要符号 | 三字符序列 |
|---|---|
{
|
??<
|
}
|
??>
|
[
|
??(
|
]
|
??)
|
#
|
??=
|
\
|
??/
|
^
|
??'
|
|
|
??!
|
~
|
??-
|
由于三字符组在早期阶段就被处理,因此像 // Will the next line be executed?????/ 这样的注释将会有效注释掉下一行代码,而像 "What's going on??!" 这样的字符串字面量会被解析为 "What's going on|" 。
示例
演示来自 <iso646.h> 的替代运算符拼写以及双字符组和三字符组的使用。 如果命令行参数包含空格,则应将其用引号括起来,例如 "Third World!" 。
可能的输出:
Hello ./a.out
参见
|
C++ 文档
关于
替代运算符表示法
|