木村です。

wanabe さんは書きました (2008/08/13 22:27):
> ワナベです。
> 
> 2008/08/12 20:56 木村浩一 <kbk / kt.rim.or.jp>:
>> ・_WIN32というシンボルは対象が広すぎ(MSVCRTを使わないものも含む)
>> ・MSVCRTのバグに対する workaround ということを明確にすべき
>>
>> と思います。
>> 後者はコメントをつけるなり、いかにもという名前で判定するなり。
> 
> なるほど。そうしますとどうするのがいいのでしょう。
> #if defined(__MSVCRT__) || defined(_MSC_VER)
> という式を考えたのですが、わかりやすい(後者を満たしている)とは思えません。
> 何かほかの定数や configure の結果などを使ってうまくできないものでしょうか。

__MSVCRT__ でソースを検索して見つけたのですが(win32.c)、

#if (defined _MT || defined __MSVCRT__) && !defined __BORLANDC__
#define MSVCRT_THREADS
#endif

このパターンと同様に config.h あたりで

#define AVOID_MSVCRT_BUG

という定義をしてしまうとか。

config.h を作るときにいろいろほかにも小さなプログラムを作りながら
検査していますので、この問題のチェックのためのステップを入れても
いいと思いますがどうでしょうか(やる場合の話として)。

でも
#if defined(__MSVCRT__) || defined(_MSC_VER)
で判定しておいて、きちんとコメントをつけておくだけでいいという気もします。


ところで問題になっているこの挙動は、msvcr[789].dll でも同様なんでしょうか?

-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
  mail kbk at kt.rim.or.jp
        web  www.kt.rim.or.jp/~kbk/zakkicho/
             homepage3.nifty.com/farstar/