いいじまです。

> でも、#if じゃなくて、if で書けば良いと思いますけど。
> なんか問題あるんですか?

あ、普通はそっか。きちんと最適化オプションつければ if(0) はコンパイラが
丸ごと削除してくれますものね。

ただ今回の場合、自作のヘッダファイルで

        #if WCHAR_MAX==0x7FFFUL || WCHAR_MAX==0xFFFFUL
                #define UCS2 wchar_t;
                typedef uint_least32_t UCS4;
        //後略

        と書いて、たとえば
                UCS2 *foo(UCS2[]);
        と関数を宣言して、Win32 環境ではこの foo() の引数に wchar_t の配
        列を渡す、ということをしたいんですよ。OS の MultiByteToWideChar
        は wchar_t の配列にデータを返すので。

        で、wchar_t が UCS-2 の処理系では foo() に wchar_t の配列を渡して
        も文句を言われず、かつ、wchar_t が UCS-4 の処理系、具体的に言うと
        glibc とかでは foo() に wchar_t の配列を渡そうとするとエラーない
        し警告になる、という仕様にしたいんです。

        とすると、識別子 UCS2 は typedef ではなく #define で定義する必要
        がある、というわけです。

        …汚い方法です、はい。

========================================================================
飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta           mailto:delmonta@ht.sakura.ne.jp