Article View: fj.lang.c
Article #746Re: gccのバグ?
From: Masao Seki
Date: Tue, 17 Feb 1998 00:00
Date: Tue, 17 Feb 1998 00:00
54 lines
2950 bytes
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-mailReferences:
<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