長年の謎がついに解けました。万年 C 言語初心者の私にとって。小躍りせんばかりに嬉しい豆知識です。皆さんご存知でしたか? Windows プログラムでもちゃんと printf デバッグが出来るのです!
Windows には大まかに二つのプログラム形態があります。コンソールプログラムと GUI プログラムです。コンソールプログラムは伝統ある DOS 窓から実行するやつで、GUI は一般的なダブルクリックで実行するやつです。コンソールの方は linux のプログラムなんかと同じくプログラムの標準出力を利用してデバッグしたりテキスト処理が出来るのですが、GUI プログラムの標準出力は謎の動きをするので避けて通っていました。
しかし昔から Squeak VM のソースコードを読んでいて、あちらこちらに埋め込まれている printf 見るに付け、一体アンドレアスはこれをどう使っているのか、もしかして目の交換でもしないと標準出力が見えないのではないかと不審に思っていたのです。結論は簡単でした。(たぶん) GUI プログラムとしてコンパイルされたプログラムは、自動的に標準出力をコンソールに吐き出さないだけで、実行時にパイプで指定すると利用する事は出来るという事でした。これは Windows 界では常識なのでしょうか?醜悪だ。。。
これでまた謎が一つ解けた。
あと、コンソールプログラムでもデバッグ目的での出力なら俺の場合、標準エラー(stderr)を利用したりする。これなら標準エラーだけログファイルに出力させて通常の出力を汚さなくて済むから。
そうそう、ちょうど今週の初めに見習い魔法使い達に対してやった授業が「Windows上でprintfデバッグ」でした。
しかしやっぱり書式の事を考えると OutputDebugString より printf の方が便利ですねー。最初から標準エラー出力が Visual Studio の出力ウインドウに出てくるようになってりゃいいのに。。。