なんとな~くしあわせ?の日記

JavaとかAWSの設定とかをメモする技術ブログ

Eclipse CDT + MinGWでのコンソールについて

EclipseCDT + MinGWで簡単なプログラムを作ってHelloWorldしようとすると、ビルドはできても出力が出ない。
なんでー

答え:Windows7 64bit + MinGWを使っていると、Eclipseのコンソールに出力が帰ってこないバグでした。
参考:
CDT/User/FAQ - Eclipsepedia
Bug 173732 – ANSI C's 'scanf()' and 'printf()' confused in Console [see comment 2 and 8 for workarounds]

32bit版だと別にその現象は起きてないそうだがどうなんですかね。
リンク先にあるように出力されないバッファを叩き出せば大丈夫なようですが。

それよかMakefile内に「-static」オプションをつけて依存関係をなくして実行すればよかったっていう。
プロジェクト作成->C/C++プロジェクト->Makefileプロジェクト
出来上がったMakefile内にある「LIBS」を「LIBS = -static」に変更。ビルド、実行。解決!

(…このバグで6ヶ月ぐらい悩んでたなんて言えない)

2015/09/08 追記

これの根本原因はちょっとよくわからないのですが、直接原因はioのバッファ内にデータがたまっていることなので、bugzillaのコメントにあるように、以下のステートメントを追加してやればいいでしょう。もしくは、私が上記で書いたように、プログラムをstaticリンクでビルドするとよいでしょう。

setvbuf(stdout, NULL, _IONBF, 0); 
// とりあえずC言語使えたらいいよ!って方はこれで
// これ使うとクラッシュするバージョンもあるらしいけどね!

まあ、それよか他のエディタを使うのがいいかもね。