「C言語/記法」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎3文字表記: C99とC11の差異
タグ: 2017年版ソースエディター
64 行
他の処理を行う前に、次のような3つの文字の並び(トライグラフ・シーケンス=3文字表記と呼ばれる)のうちの1つが出現するたびに、対応する1つの文字に置き換えられます。
 
:<pre>
??= #
??( [
83 行
3文字表記に一致する文字列を表記したい場合、「?」の代わりに逆斜線表記(エスケープシーケンス)の「\?」を用いるとよい。
現在、3文字表記はほとんど使われず、コンパイラによっては、デフォルトで無効にであったり、実装されていなかったり、外部のプロプロセッサとして実装されていたりする。
 
この部分は、ISO/IEC 9899:1999(C99;JIS X 3010:2003の翻訳元)とISO/IEC 9899:2011(C11)で異なる部分で、JIS X 3010:2003『プログラム言語 C』では、
<blockquote class="toccolours" cite="JIS X 3010:2003『プログラム言語 C』">
次に示す左側の三つの文字の並び[3文字表記(trigraph sequence(12))という。]がソースファイルの中にある場合,その三つの文字の並びを同じ行の右側の対応する1文字に置き換える。
<pre>
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~
</pre>
これら以外の3文字表記は,存在しない。
上に掲げた3文字表記の始まりとならない?は,置き換えない。
</blockquote>
となっており、修正後のC11では前処理であることが強調されています<ref>この変更は、[https://www.iso.org/standard/50510.html ISO/IEC 9899:1999/COR 3:2007 Programming languages — C — Technical Corrigendum 3](C99の技術的正誤表第3号)で行われ、[https://www.iso.org/standard/35952.html ISO/IEC 9899:1999/COR 1:2001 Programming languages — C — Technical Corrigendum 1](C99の技術的正誤表第1号)に基づくJIS X 3010:2003には間に合いませんでした。</ref>。
 
=== 多バイト文字 ===