久しぶりの更新です。こんにちは、keichanです。
今回は余り知られていない感じのする3文字表記(trigraph sequence)を取り上げてみます。
JIS X 3010:2003(ISO/IEC 9899:1999) 5.2.1.1 3文字表記
には以下の3文字表記があると記述されている。
??= → #
??( → [
??/ → \
??) → ]
??' → ^
??< → {
??! → |
??> → }
??- → ~
今回調べて初めて知ったのが「#」に対応する3文字表記が存在していたこと。
そこで3文字表記を使ったコードを書いてみた。(コンパイラはVisual Studio 2005 Professional Editionを使用)
処理内容は、全く意味がありません。
変換前コード
#include <stdio.h>
#define SWAP(x,y) \
{ \
int tmp = x; \
x = y; \
y = tmp; \
}
int main(void)
{
int int_array[5] = { 1, 2, 3, 4, 5 };
int a = int_array[3] ^ int_array[4];
SWAP(*int_array, *(int_array + 2));
if( a < 0 ) {
a = ~a | int_array[0];
}
}
3文字表記を可能な限り使用したコード
??=include <stdio.h>
??=define SWAP(x,y) ??/
??< ??/
int tmp = x; ??/
x = y; ??/
y = tmp; ??/
??>
int main(void)
??<
int int_array??(5??) = ??< 1, 2, 3, 4, 5 ??>;
int a = int_array??(3??) ??' int_array??(4??);
SWAP(*int_array, *(int_array + 2));
if( a < 0 ) ??<
a = ??-a ??! int_array??(0??);
??>
??>
よ・・・読めない・・・・きっとIOCCCに提出するコードくらいしか見かけないと思うんですが。
でも、コンパイルは通る(アタリマエ)