🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #748

Re: gccのバグ?

#748
From: Kikuti Masasi
Date: Tue, 17 Feb 1998 00:00
58 lines
2556 bytes
菊池です。

>以下の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 )
うーむ、前のCの課題でCの式を木であらわすプログラムを作ったとき
これを全部覚えていたはずなのに、たった2週間でぼけてしまったようだな。
作ったプログラムにかけてみるとエラーが出た。

>SunOS(4.* ですね?)のccは ANSI じゃないですからね。期待「どおり」の結
>果が出ても不思議はありません。
確かに、SunOS4.1となってました。ccはめったに使わないから知りませんでした。
#マニュアルは棚の中にあって鍵かかってるし。

後、こんなコードはいいのかな、
 0[printf]("unix\n");
Linuxのgcc2.7.2.1でコンパイルできて、
unix
と表示されました。次に、
 int (*a)(const char *,...) = printf;
 1[a]("unix\n");
だと
 incl  %eax
 pushl $.LC0
 call  *%eax
というコードを吐いて、場所が良かったのか
unix
と表示し無事終了しました。次に10を試すと、やっと、
Illegal instrument (core dumped)
とSIGILLのエラーメッセージ(初めて見た)がでました。
T型へのポインタaに整数bを足すと、
結果 = a の値 + sizeof(T) * b の値
のはずで、この場合Tは関数型だから、
最後に
 sizeof(* printf);
を試すと、1となりました。
sizeof の被演算数に関数型はエラーだと思うのですが、
どうでしょうか。

g740710@komaba.ecc.u-tokyo.ac.jp
菊池正史
Technical Details
Message-ID: <6cb15q$ka2$1@news1.sphere.ad.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <6c94dm$e7p$1@news1.sphere.ad.jp> <6c9hdf$12l@applepie.kmori.ca2.so-net.or.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 106434,96bfc494d719500d
X-Google-Attributes: gid106434,public
From: Kikuti Masasi<g740710@komaba.ecc.u-tokyo.ac.jp>
Subject: Re: gccのバグ?
Date: 1998/02/17
Message-ID: <6cb15q$ka2$1@news1.sphere.ad.jp>
X-Deja-AN: 325759753
References: <6c94dm$e7p$1@news1.sphere.ad.jp> <6c9hdf$12l@applepie.kmori.ca2.so-net.or.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Organization: u-tokyo
Newsgroups: fj.lang.c