替代运算符和记号
C 源代码可以使用任何 8 位字符集编写,包括 ISO 646:1983 不变字符集,甚至是非 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++ 文档 关于 替代运算符表示
|