Article View: fj.sys.rs6000
Article #26Re: 入れ子構造体(C言語)
From: Masao Seki
Date: Fri, 19 Jun 1998 00:00
Date: Fri, 19 Jun 1998 00:00
65 lines
3007 bytes
3007 bytes
こんばんは、関と申します。
Daiju Honda wrote:
・
・
> Iwayama wrote:
・
> > 現在,C言語を使ってプログラムを組んでいるのですが,
> > 入れ子の構造体(配列)を使用するとコンパイルがうまく行きません.
> > typedef struct _log {
> > int product;
> > struct ST_DATE dat[35]; <-----(1)
> >
> > } ST_LOG;
> >
> > typedef struct _dates {
・
> > double avail;
> > struct ST_TIME st[200]; <-----(2)
> >
> > } ST_DATE;
> >
> > typedef struct _times {
・
> > int n_license;
> >
> > } ST_TIME;
>
> これならうまくいくと思いますが...
・
・
> いかがでしょう?
> --
質問に対する対処は、Daiju Hondaさんが修正された通りで、何の依存も
ありません。ただ、元記事のIwayamaさんが質問したかったのは、
> > struct _dates dat[35]; <-----(1)
> > struct _times st[200]; <-----(2)
としてあったケースについてだと思うのですが。
元記事の通りであれば、HP-UXやIRIXでも通った筈はないので。
それで、HP-UXやIRIXでは、構造体タグの前方参照ができていたのに、
AIX 3.1.4では何で駄目なんだと言うことかと。
結論を言うと、HP-UXやIRIXで配列に対しても前方参照がで効いていたのは、
(確認できませんが、出来ていたのでしょうね?)そちらが、拡張機能で
あり、できないAIX 3.1.4に文句は言えないと思います。
前方参照された構造体タグには不完全型が与えられると思いますが、
K & R 第2版(P.263)には、「不完全な構造体型あるいは共用体型をもつ
オブジェクトは、例えば宣言(定義ではなく)のようにそのサイズが必要
ない文脈で、ポインタを指定したり、typedefを創ったりするのに使っても
よいが、それ以外の使用は許されない。」とあります。
この記述に従えば、配列に対して、前方参照された構造体タグが適用でき
る方が、規格外の訳です。(VC++5.0やgcc2.7.2も駄目です。)
対策としては、今回の場合前方参照するメリットは殆どないと思われます
ので、Daiju Hondaさんが示されたように、順序を入れ替えて宣言するのが
良いと思います。
--
関 正生 <masao.seki@fujixerox.co.jp || ma-seki@gb3.so-net.or.jp>
Technical Details
Message-ID:
<358A603B.20F3@rim.crl.fujixerox.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6mc9sa$s7m@sunsp.sunsp.mcor.co.jp> <358A2BE0.E76AF4F2@cresco.co.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: f5470,df9a2f224948a932 X-Google-Attributes: gidf5470,public X-Google-Thread: 114a87,6e87fb56ecddf70d X-Google-Attributes: gid114a87,public From: Masao Seki <seki@rim.crl.fujixerox.co.jp> Subject: Re: 入れ子構造体(C言語) Date: 1998/06/19 Message-ID: <358A603B.20F3@rim.crl.fujixerox.co.jp> X-Deja-AN: 364178278 Content-Transfer-Encoding: 7bit References: <6mc9sa$s7m@sunsp.sunsp.mcor.co.jp> <358A2BE0.E76AF4F2@cresco.co.jp> Content-Type: text/plain; charset=iso-2022-jp Organization: Fuji Xerox Mime-Version: 1.0 Reply-To: masao.seki@crl.fujixerox.co.jp Newsgroups: fj.sys.rs6000,fj.comp.lang.c