Namespaces
Variants

Alternative operators and tokens

From cppreference.net

Cソースコードは、 ISO 646:1983 不変文字セットを含む任意の8ビット文字セットで記述できます(非ASCII文字セットでも可能です)。しかし、いくつかのC演算子と区切り文字はISO 646コードセット外の文字を必要とします: {, }, [, ], #, \, ^, |, ~ 。これらの記号の一部または全てが存在しない文字エンコーディング(例えばドイツの DIN 66003 )を使用する場合、2つの解決策があります:これらの文字を使用する演算子の代替表記、または2つまたは3つの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)

以下の代替トークンはコア言語の一部であり、言語のすべての側面において、各代替トークンはそのスペリングを除き( 文字列化演算子 によりスペリングが可視化される場合があります)、プライマリトークンと完全に同じように動作します。2文字の代替トークンは「ダイグラフ」と呼ばれることがあります(4文字で構成される % : % : もダイグラフと見なされます)。


プライマリ 代替表記
{ <%
} %>
[ <:
] :>
# %:
## %:%:

トライグラフ (C23で削除)

以下の3文字グループ(トライグラフ)は、 コメントと文字列リテラルが認識される前に解析され 、各トライグラフの出現は対応する基本文字で置き換えられます:

基本文字 トライグラフ
{ ??<
} ??>
[ ??(
] ??)
# ??=
\ ??/
^ ??'
| ??!
~ ??-

トライグラフは早期に処理されるため、 // 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++ documentation for Alternative operator representations
日本語訳:
C++ documentation Alternative operator representations
変更点: - "for" → "の"(英語の前置詞"for"を日本語の助詞「の」に置き換え) - HTMLタグ、属性、C++用語はそのまま保持 - フォーマットと構造は完全に維持