Article View: fj.lang.c
Article #738Re: gccのバグ?
From: MORI Koichiro
Date: Mon, 16 Feb 1998 00:00
Date: Mon, 16 Feb 1998 00:00
51 lines
2179 bytes
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-mailReferences:
<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