MinGWで色々悩む

Windows上でC言語のプログラムをコンパイルする際にMinGWGCCを使ってるんだけど、標準入力からバイナリファイルを読み込もうとするとテキストを想定しているせいで0x0d、0x0aが0x0aに変換されてしまう。
簡易16進ダンププログラム(汎用)を見つけて読んでみると、この変換を抑止するWindows固有の_setmodeなる関数があるらしく、MinGWでもio.hやfcntl.hをincludeすることで無事使えた。
次はlong longで定義した64ビット長の変数が32ビット長に丸められてしまうように見える問題に出食わした。こっちはRDTSC を printf の %llu で表示したら値が 32 bit に丸められたを見つけたので読んでみると、MinGWWindowsのCライブラリ(MSVCR)を使うのでprintf等で使う%lldを64ビット長の表示の意味で解釈してくれないらしく、代わりにVisual C++と同じように%I64dを使う必要があるらしい。
ただ、自宅の64ビット版Windowsでは%lldで64ビット長の表示が行われたような記憶があるので、その辺にも依存するのかも。