久しぶりの更新です。こんにちは、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に提出するコードくらいしか見かけないと思うんですが。
でも、コンパイルは通る(アタリマエ)