Article View: fj.lang.c
Article #748Re: gccのバグ?
From: Kikuti Masasi
Date: Tue, 17 Feb 1998 00:00
Date: Tue, 17 Feb 1998 00:00
58 lines
2556 bytes
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-mailReferences:
<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