文字コード

そういえばgccではどの文字コード体系まで扱えるのか試したことがなかったし、これに引っかかったことがあるので試してみた。
以下のただ文字列を表示するだけのごく簡単なプログラム(ds.c)を使った。

#include <stdio.h>
int main(void){
  int n = 42;
  printf("人生、宇宙、すべての答え: %d", n);
}

vimで日本語を含むファイルを作成するとデフォルトでEUCになるので、nkfコマンドで

$ nkf -e ds.c > ds.euc.c
$ nkf -s ds.c > ds.sjis.c
$ nkf -w ds.c > ds.utf8.c
$ nkf -j ds.c > ds.jis.c

EUC(特に意味はないけど)、ShiftJIS、UTF-8、JIS(7bit)コードのファイルに変換。
で、それぞれコンパイルしてみると、EUCUnicodeは当然として、ShiftJISも正常にコンパイルできた。ただ、JISだけはエラーになってコンパイルできなかった。
できたプログラムを実行すると、EUC以外は文字化け。ただ、これはシェルの設定がEUCになっているためなので

$ ./ds.sjis | nkf -e

で出力をEUCに戻すと正常に表示された。