🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #746

Re: gccのバグ?

#746
From: Masao Seki
Date: Tue, 17 Feb 1998 00:00
54 lines
2950 bytes
こんにちは、関と申します。最近NetNewsへの投稿を始めた新参者です。
よろしくお願いいたします。

> In article <6c94dm$e7p$1@news1.sphere.ad.jp>
> Kikuti Masasi<g740710@komaba.ecc.u-tokyo.ac.jp> writes:
> 
> > #include <stdio.h>

> >
> > int main() {
> >       printf(sizeof(2)["unix"] + "unix");
> >       printf(sizeof(int)["unix"] + "unix");

何かの参考書にあった、
	char str[6] = "abcde";
	printf("%c\n", str[3]);
は、
	printf("%c\n", *(str+3));
とも書けるし、直接
	printf("%c\n", "abcde"[3]);
と書いても良く、さらに
	printf("%c\n", 3["abcde"]);
も、文法的には間違いではない、という解説の応用ですね。
#入門段階の方の為、かなりくどい引用にしています。(上の例は
#今創作したものです。)こういう知識は、デバッグの達人を目指す上では
#有用な知識かも知れませんが、殆ど有害無益としか思えない、ことさらに
#奇をてらったコーディング方を紹介している事にまゆをしかめたものです。

> [] 演算子が sizeof(type) よりも優先順位が高いことを
> 忠実に反映した結果の構文エラーではないでしょうか。
> gcc は ANSI に準拠していますから。
> 
> cc は、sizeof 単項演算子と sizeof(type) とで
> 優先順位が異なるのですね。
> 面白い仕様だと思います。

トークンの抽出時に適用される「最大むしゃ食いルール」に似たルールが構文
解釈にもあり、そのルールと演算子の優先順位のどちらが優先さるのかという
問題のような気がします。

つまり、sizeof 演算子のoperandには、(評価されない)式か、かっこで囲ま
れた型指定子のどちらかが来ますから、「sizeof(2)」ではまだ結合関係が決定
されず、先の文字列まで読んで最終的に「sizeof( (2)["unix"] )」と解釈され
るが、「最大むしゃ食いルール」を優先するSunOS4.Xのpcc(portable cc)で
は、
「sizeof(int)」の解釈が一意に決まるので、「(sizeof(int))["unix"]」と
解釈される。これに対して、あくまで演算子の優先順位を優先するgccでは
「sizeof( (int)["unix"] )」と解釈され、構文エラーになるのだと思います。
これが、gccがANSI準拠なのでそうなるのか、単なる実装上の都合でそうなって
いるのかは良く知りません。どなたか詳しい方フォロー願います。

--
関 正生 <masao.seki@fujixerox.co.jp || ma-seki@gb3.so-net.or.jp>
Technical Details
Message-ID: <34E901E3.7C1@rim.crl.fujixerox.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <6c94dm$e7p$1@news1.sphere.ad.jp> <vik67mf4xpb.fsf_-_@eriko.is.s.u-tokyo.ac.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 106434,96bfc494d719500d
X-Google-Attributes: gid106434,public
From: Masao Seki <seki@rim.crl.fujixerox.co.jp>
Subject: Re: gccのバグ?
Date: 1998/02/17
Message-ID: <34E901E3.7C1@rim.crl.fujixerox.co.jp>
X-Deja-AN: 325755315
Content-Transfer-Encoding: 7bit
References: <6c94dm$e7p$1@news1.sphere.ad.jp> <vik67mf4xpb.fsf_-_@eriko.is.s.u-tokyo.ac.jp>
Mime-Version: 1.0
Reply-To: masao.seki@fujixerox.co.jp
Content-Type: text/plain; charset=iso-2022-jp
Organization: Fuji Xerox
Newsgroups: fj.lang.c