いいじまです。

> typedef は typedef名を定義するものであって、型を定義するのでは
> ありませんから、

なるほど、「typedef 名」という、きちんとした言葉があるんですね。

> >たとえば、こんなコードです。
> >       //---システムが用意するヘッダファイル
> >       typedef unsigned short wchar_t;
> 
> >       //---それを #include するコード
> >       #if sizeof(wchar_t)==2
> 
> この #if の式は、
> 
>     0 ( 0 ) == 2
> 
> と解釈され、構文エラーになります。

うわあ…
「識別子 wchar_t は未定義」という致命的エラーになると思っていたのですが、
そうではないのが規格として正しいのですね。

#そもそも #if の中では sizeof も使えないのか…

実際の処理系では
・#if の中で sizeof が使えるように独自拡張を施している
・未定義の識別子を使ったらエラーないし警告を出す
ものがあると思うので、余裕のあるときに複数の処理系で確認してみます。

> >これはプリプロセッサの段階でエラーになるのが正しいんですよね。
> 
> 理由はともかく、結論だけは合っています。:-)

ありがとうございます。やはりこの場合は WCHAR_MAX を使うことになりますね。

歴史的にはCのコードのコンパイルはプリプロセッサ、パーサ、コードジェネ
レータ、アセンブラ、リンカの5段階で、typedef はパーサの担当だから、その
前のプリプロセッサが担当する #if では扱えないはず、規格もそれを追認する
規定をしているはず、と予想していました。

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