替代运算符和标记
C 源代码可以用任何包含 ISO 646:1983 不变字符集的 8 位字符集编写,即使是非 ASCII 字符集。但是,一些 C 运算符和标点符号需要超出 ISO 646 代码集的字符:{, }, [, ], #, \, ^, |, ~
。为了能够使用某些或所有这些符号不存在的字符编码(例如德语 DIN 66003),有两种可能性:使用这些字符的运算符的替代拼写,或者使用两个或三个 ISO 646 兼容字符的特殊组合,这些组合被解释为单个非 ISO 646 字符。
内容 |
[编辑] 运算符宏(C95)
对于使用非 ISO646 字符的运算符,在 <iso646.h> 中定义了作为宏的替代拼写
在头文件
<iso646.h> 中定义 | |
主要 | 替代 |
&& |
和 (运算符宏) |
&= |
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++ 文档 为 替代运算符表示
|