🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.sys.rs6000
Article #26

Re: 入れ子構造体(C言語)

#26
From: Masao Seki
Date: Fri, 19 Jun 1998 00:00
65 lines
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-mail
References: <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