替代運算子和標記
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++ 文件,關於 替代運算子表示
|