• ベストアンサー

WCHAR_MAXがUnsignedでない?

Linux, BSD問わず、C/C++で、なぜWCHAR_MAXとWCHAR_MINはsignedな数で #defineされてるんでしょうか? wchar_tはunsigned intと等価なのに... どんな理由があるんでしょうか。それともただのバグ(そんな事ないと思いますが)?

質問者が選んだベストアンサー

  • ベストアンサー
  • 500cii
  • ベストアンサー率50% (14/28)
回答No.2

http://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%A4%E3%83%89%E6%96%87%E5%AD%97 (これの「内部表現」を見てください) これを見る限りsignedかunsignedかは実装依存かと思われます。

stosh666
質問者

お礼

ありがとうございます。signedかどうかは決められてないんですね。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

既に回答はありますが, 規格上も wchar_t は整数型 (「int型」ではない) であることしか保証されていません. 特に「符号付きか符号なしか」については, 規格では一切触れられていません.

stosh666
質問者

お礼

ありがとうございます。signedかどうかは決められてないんですね。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>wchar_tはunsigned intと等価なのに... wchar_tはunsigned intと等価とは決まってませんけど。 FreeBSD 9だとwchar_tの定義は以下のようになってます(必要な部分だけ抜粋) typedef int __ct_rune_t; /* arg type for ctype funcs */ typedef __ct_rune_t __wchar_t; /* wchar_t (see above) */ typedef __wchar_t wchar_t;

stosh666
質問者

お礼

ありがとうございます。ただのintだったとは。