名稱空間
變體
操作

替代運算子和標記

來自 cppreference.com
< c‎ | 語言

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!"

%:include <stdio.h>
%:include <stdlib.h>
??=include <iso646.h>
 
int main(int argc, char** argv)
??<
    if (argc > 1 and argv<:1:> not_eq NULL)
    <%
       printf("Hello %s??/n", argv<:1:>);
    %>
    else
    <%
       printf("Hello %s??/n", argc? argv??(42??'42??) : __FILE__);
    %>
 
    return EXIT_SUCCESS;
??>

可能的輸出

Hello ./a.out

[編輯] 參見

C++ 文件,關於 替代運算子表示