🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #738

Re: gccのバグ?

#738
From: MORI Koichiro
Date: Mon, 16 Feb 1998 00:00
51 lines
2179 bytes
>>>>> Kikuti Masasi <g740710@komaba.ecc.u-tokyo.ac.jp> writes:

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

 > 下のprintf()は、sizeof(int) である 4 番目の"unix"の要素、nul = 0
 > を"unix"に足すから、unixと表示するはずなんですが、
 > gcc2.7.2.2でコンパイルすると、
 > syntax error before `['
 > と文句を言い、

ANSI の文法定義に従えば、sizeof(int)["unix"] は syntax error です。だ
から gcc の動作は正しいのです。

以下のANSI C文法(の一部)によれば、[] の左側に括弧なしで現われることが
できるのは idenfifier、constant、string-literal、関数呼出し、構造体メ
ンバーアクセス、後置の++、-- (の組合せ)のみです。だから sizeof(int)は
現われ得ません。

postfix-expression:
	primary-expression
	postfix-expression [ expression ]
	postfix-expression ( argument-expression-list<opt> )
	postfix-expression . identifier
	postfix-expression -> identifier
	postfix-expression ++
	postfix-expression --

primary-expression:
	identifier
	constant
	string-literal
	( expression )

もちろん、意図したことは

	(sizeof(int))["unix"]

とすれば表現できるでしょう。

 > SunOSのccでコンパイルすると、期待どうりの結果が出ます。

SunOS(4.* ですね?)のccは ANSI じゃないですからね。期待「どおり」の結
果が出ても不思議はありません。

--
森 公一郎 (MORI Koichiro),  kmori@ca2.so-net.or.jp | kmori@lsi-j.co.jp
Technical Details
Message-ID: <6c9hdf$12l@applepie.kmori.ca2.so-net.or.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <6c94dm$e7p$1@news1.sphere.ad.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 106434,96bfc494d719500d
X-Google-Attributes: gid106434,public
From: kmori@ca2.so-net.or.jp (MORI Koichiro)
Subject: Re: gccのバグ?
Date: 1998/02/16
Message-ID: <6c9hdf$12l@applepie.kmori.ca2.so-net.or.jp>
X-Deja-AN: 325553598
References: <6c94dm$e7p$1@news1.sphere.ad.jp>
Mime-Version: 1.0 (generated by tm-edit 7.105)
Content-Type: text/plain; charset=ISO-2022-JP
Organization: Inagi-shi, Tokyo, Japan
Newsgroups: fj.lang.c