Shammer's Philosophy

My private adversaria

変換仕様

Tiger より後のバージョンではわからないが、それ以前は Java でサンプルを作ると


 System.out.println("hogehoge");


というようなコードを使って文字をコンソールに表示させていた。
System クラスの static 変数 out がコンソールとひもづけられていて、その実体は java.io.PrintStream だ。
標準出力につながっているストリームオブジェクトといったところか。
これと同じようなことをCでやろうとすると、よく使われるのが


 printf("Hello World\n");


という構文。これに変数などを渡して、その内容を表示させることができる。


ここで、上記Javaにないものに変換仕様というものがある。
%d や %s などで該当する変数を表示させるというもの。
Java の System.out.println に引数として渡されるのは文字列として扱われる。
つまり、toString() された状態で扱われている。
この部分でもう少し柔軟な対応がCだとできる。


 char value = 'a';
 printf("%d\n",value);
 printf("%c\n",value);


とやると、最初は 97 という出力になる。どうも a はASCIIコードだと 97 という意味のようだ。
一つの変数でも変換処理なく別の形で扱えるのは便利っぽいが、
Javajava.io.PrintStream.print メソッドではこれができない。
Java は、低いレイヤーの処理を書くよりもアプリケーション層で使われることが多い。
あったとしてもあまり使わないかな・・・(シリアライズは使われるが)。
少なくともこうしたことができずに困ったことはない。
あってもSun提供のライブラリ内で行う変換処理とかのレベルかもしれないが。
Cで書いているとこうしたことができて便利、、、ということもあるのかな@_@???