Re: typedefについて確認させてください
いいじまです。
> 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
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735