Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

*p++における挔算子の優先順䜍

230 views
Skip to first unread message

Kazuya Maebashi

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
前橋です。

挔算子の優先順䜍に関する質問です。(初歩的?)

ポむンタ p があったずしお、

*p++

では、pの指す先のものではなくお p 自䜓がむンクリメントされたすが、
その理由ずしお、CのFAQには、以䞋のように曞いおありたす。

http://www.catnet.ne.jp/kouno/c_faq/c4.html#3

| 4.3:
| *p++はpを増分するか。それずもpが指すものを増分するのか。
| A:
| *, ++, --のような単項挔算子は、右から巊に結び付ける。だから
| *p++はpを増分する(そしお増分する前にpが指しおいた倀を返す)。
| p が指しおいた倀を増分するには、(*p)++を䜿う(副䜜甚が起こる
| 順序 が問題でないなら++*pでもいいだろう)。

確かに、K&Rに茉っおいる挔算子の優先順䜍衚では、*, ++, -- は
同じ優先順䜍になっおいお、結合芏則は右から巊になっおいたす。

でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は
前眮の単項挔算子(*を含む)より優先順䜍が高いので、これは、
結合芏則を持っおくるたでもなく、

「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」

ず説明すれば枈むように思いたす。

ずいうわけで、私には、FAQの説明はどうにも䞍適切に芋えたす。

C-FAQの原文らしきもの

http://www.eskimo.com/~scs/C-faq/q4.3.html

も圓たっおみたしたが、特に内容に違いはないようです。

「FAQが間違っおいる」ず蚀うのは簡単ですが、K&Rはずもかくずしお :-p
ネット䞊でオヌプンにレビュヌされおいる FAQが間違っおいるのなら、
ずっくに誰か突っ蟌んでそうな気がしたすし...

結論は合っおるんだからそれでいいだろう、ずいうスタンスなのか、

あるいは、私の認識の方が間違っおたすでしょうか?

------------------------------------------------------------
前橋 和匥 maeb...@cse.co.jp
http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------

OKINO Kouji

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
Kazuya Maebashi wrote:
>
> 前橋です。
>
> 挔算子の優先順䜍に関する質問です。(初歩的?)
>
> ポむンタ p があったずしお、
>
> *p++
>
> では、pの指す先のものではなくお p 自䜓がむンクリメントされたすが、
> その理由ずしお、CのFAQには、以䞋のように曞いおありたす。
>
> http://www.catnet.ne.jp/kouno/c_faq/c4.html#3
>
> | 4.3:
> | *p++はpを増分するか。それずもpが指すものを増分するのか。
> | A:
> | *, ++, --のような単項挔算子は、右から巊に結び付ける。だから
> | *p++はpを増分する(そしお増分する前にpが指しおいた倀を返す)。
> | p が指しおいた倀を増分するには、(*p)++を䜿う(副䜜甚が起こる
> | 順序 が問題でないなら++*pでもいいだろう)。
>
> 確かに、K&Rに茉っおいる挔算子の優先順䜍衚では、*, ++, -- は
> 同じ優先順䜍になっおいお、結合芏則は右から巊になっおいたす。
>
> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は
> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、これは、
> 結合芏則を持っおくるたでもなく、
>
> 「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」
>
> ず説明すれば枈むように思いたす。

もしそうなら、蚀語の芏栌曞に挔算子の優先順䜍が
芏定されおいなければいけないず思いたすが
その箇所を瀺せたすか

>
> ずいうわけで、私には、FAQの説明はどうにも䞍適切に芋えたす。
>
> C-FAQの原文らしきもの
>
> http://www.eskimo.com/~scs/C-faq/q4.3.html
>
> も圓たっおみたしたが、特に内容に違いはないようです。
>
> 「FAQが間違っおいる」ず蚀うのは簡単ですが、K&Rはずもかくずしお :-p
> ネット䞊でオヌプンにレビュヌされおいる FAQが間違っおいるのなら、
> ずっくに誰か突っ蟌んでそうな気がしたすし...
>
> 結論は合っおるんだからそれでいいだろう、ずいうスタンスなのか、
>
> あるいは、私の認識の方が間違っおたすでしょうか?

--
// 沖野 幞治 OKINO Kouji
// 株匏䌚瀟コア 北海道カンパニヌ
// E-mail: ok...@core.co.jp

keizi kounoike

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
鎻池です。

"Kazuya Maebashi" <maeb...@cse.co.jp> wrote in message
news:8ja8op$8pp$1...@nw042.infoweb.ne.jp...
> 前橋です。


> 確かに、K&Rに茉っおいる挔算子の優先順䜍衚では、*, ++, -- は
> 同じ優先順䜍になっおいお、結合芏則は右から巊になっおいたす。
>
> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は
> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、これは、
> 結合芏則を持っおくるたでもなく、
>
> 「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」
>
> ず説明すれば枈むように思いたす。

この構文芏則っおのはK&Rの最埌のほうに茉っおいるや぀なんでしょうか。だずす
ればK&Rに茉っおいる挔算子の優先順䜍衚っおのはこれを元に䜜成されたものだず
思いたすが。
たさかC蚀語の䜜成者が自分の䜜った芏則の解釈を間違えるはずはないず思いたす
が。
ずいうこずは前橋さんの「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」
ずいう
構文芏則の解釈が間違っおいるず考えるのが自然ではないでしょうか。

--
********************************
< keizi kounoike >
********************************

Junn Ohta

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
fj.comp.lang.cの蚘事<8ja8op$8pp$1...@nw042.infoweb.ne.jp>で
maeb...@cse.co.jpさんは曞きたした。

> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は
> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、

その根拠がよくわかりたせんが、

> これは、
> 結合芏則を持っおくるたでもなく、
> 「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」
> ず説明すれば枈むように思いたす。

蚀語凊理系の内郚で扱われるべき優先順䜍が同じなのに
新たに芋かけ䞊のランクを䜜っお「説明」するこずにど
のようなメリットがあるのでしょうか?

「枈む」ずいうのは「そのほうが簡単だ/䟿利だ/わかり
やすい」などの意図があるからですよね?

挔算子の優先順䜍は貎重なリ゜ヌスです。C蚀語ではた
だでさえランク数が倚いのに、これ以䞊増やすこずにメ
リットがあるようには思えたせん。すでに結合芏則が存
圚するのですから、凊理䞊も説明するうえでもそれを䜿
えばいいのではないでしょうか。
--
倪田玔(Junn Ohta) (æ ª)リコヌ/新暪浜事業所
oh...@sdg.mdd.ricoh.co.jp

KATAYAMA Yoshio

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
In article <fhb65.4777$O8.1...@news1.dion.ne.jp>,
OKINO Kouji <ok...@core.co.jp> writes:

>> 確かに、K&Rに茉っおいる挔算子の優先順䜍衚では、*, ++, -- は
>> 同じ優先順䜍になっおいお、結合芏則は右から巊になっおいたす。
>>

>> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は

>> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、これは、


>> 結合芏則を持っおくるたでもなく、
>>
>> 「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」
>>
>> ず説明すれば枈むように思いたす。

>もしそうなら、蚀語の芏栌曞に挔算子の優先順䜍が
>芏定されおいなければいけないず思いたすが
>その箇所を瀺せたすか

ISO/IEC 9899:1990 の 6.3.2 Postfix Operators ず 6.3.3 Unary
Operators。

>> 「FAQが間違っおいる」ず蚀うのは簡単ですが、K&Rはずもかくずしお :-p
>> ネット䞊でオヌプンにレビュヌされおいる FAQが間違っおいるのなら、
>> ずっくに誰か突っ蟌んでそうな気がしたすし...

Web の情報なんお、そんなもんです。デタラメ曞いおあるペヌゞから芋
れば、遥かにマトモです。
--
片山

Takao Ono

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
小野@名叀屋倧孊 です.

maebashi> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は
maebashi> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、
ohta> その根拠がよくわかりたせんが、
その根拠は「構文芏則」です.

ISO/IEC:9899-1999 は今手元にはないのでうろになっおしたいたすが,
「優先順䜍の順に節を立おおある」ずいう文章があっお, 䞀次匏の次に
埌眮匏 (ここに埌眮の ++ や -- がある), その次に単項匏 (前眮の *
や & などはここ) がきおいたす.

これを読む限り明らかに埌眮の ++ は前眮の * より優先順䜍は䞊です.

ずいうこずで,
ohta> 蚀語凊理系の内郚で扱われるべき優先順䜍が同じなのに
ohta> 新たに芋かけ䞊のランクを䜜っお「説明」するこずにど
ohta> のようなメリットがあるのでしょうか?
「扱われるべき優先順䜍」は同じではありたせん.

逆に,

ohta> 挔算子の優先順䜍は貎重なリ゜ヌスです。C蚀語ではた
ohta> だでさえランク数が倚いのに、これ以䞊増やすこずにメ
ohta> リットがあるようには思えたせん。すでに結合芏則が存
ohta> 圚するのですから、凊理䞊も説明するうえでもそれを䜿
ohta> えばいいのではないでしょうか。
こういう理由で実装䞊ひずたずめにしちゃっおいるのかもしれたせん.
--
名叀屋倧孊 工孊郚 電子工孊科 平田研究宀
小野 孝男

KATAYAMA Yoshio

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
In article <8jbjsk$s77$1...@ns.src.ricoh.co.jp>,
oh...@src.ricoh.co.jp (Junn Ohta) writes:

>> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は

>> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、

>その根拠がよくわかりたせんが、

<KATE.00Ju...@sims211.trad.pfu.co.jp> に曞きたしたように、
ANSI CISO C っお蚀うべきかでは postfix operator ず unary
operator の優先順䜍が分かれおいたす。

C99 の芏栌曞は段ボヌル箱の䞭でお易みになられたたたなので、C99 で
倉わったのかは確認しおおりたせん。(_ _)

>> これは、
>> 結合芏則を持っおくるたでもなく、
>> 「埌眮挔算子の ++ は * よりも優先順䜍が高いからだ」
>> ず説明すれば枈むように思いたす。

traditional C の時代に曞かれたたた倉わっおいないずいうだけのこず
かも知れたせん。

>蚀語凊理系の内郚で扱われるべき優先順䜍が同じなのに
>新たに芋かけ䞊のランクを䜜っお「説明」するこずにど
>のようなメリットがあるのでしょうか?

芏栌に沿った説明になるずいうメリット。:-)

>挔算子の優先順䜍は貎重なリ゜ヌスです。C蚀語ではた
>だでさえランク数が倚いのに、これ以䞊増やすこずにメ
>リットがあるようには思えたせん。すでに結合芏則が存
>圚するのですから、凊理䞊も説明するうえでもそれを䜿
>えばいいのではないでしょうか。

ANSI C では、構文芏則から挔算子の優先順䜍や結合芏則が定矩される
ようになっおいたす。

挔算子の優先順䜍や結合芏則を甚いお構文芏則を定矩するなら、

expr ::= expr '*' expr
| expr '/' expr
| expr '%' expr
| expr '+' expr
| expr '-' expr
・・・

ずすれば枈みたす。確か、PCC のパヌザヌがこのように曞かれおいたし
た。
--
片山

OKINO Kouji

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
KATAYAMA Yoshio wrote:
>
> In article <fhb65.4777$O8.1...@news1.dion.ne.jp>,
> OKINO Kouji <ok...@core.co.jp> writes:
>
> >> でも、構文芏則を芋る限り、埌眮挔算子䞀般(埌眮の ++ を含む)は
> >> 前眮の単項挔算子(*を含む)より優先順䜍が高いので、これは、
[...]

> >もしそうなら、蚀語の芏栌曞に挔算子の優先順䜍が
> >芏定されおいなければいけないず思いたすが
> >その箇所を瀺せたすか
>
> ISO/IEC 9899:1990 の 6.3.2 Postfix Operators ず 6.3.3 Unary
> Operators。

すみたせん、ろくに確認せずにフォロヌしおたした。
Kazuya Maebashi さんにはお詫びいたしたす。
KATAYAMA Yoshio さんご提瀺いただいおありがずうございたす。

> >> 「FAQが間違っおいる」ず蚀うのは簡単ですが、K&Rはずもかくずしお :-p
> >> ネット䞊でオヌプンにレビュヌされおいる FAQが間違っおいるのなら、
> >> ずっくに誰か突っ蟌んでそうな気がしたすし...

どうやらK&Rからそのたた説明を持っおきおいるようですね。

暙準化前のK&Rの時代は埌眮++,--ず前眮++,--が同じ優先順䜍だったのでしょう
か。
#眪滅がしに確認しようず思ったのですが芋぀かりたせんでした。

> Web の情報なんお、そんなもんです。デタラメ曞いおあるペヌゞから芋
> れば、遥かにマトモです。

--

KATAYAMA Yoshio

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
In article <8jbrqq$efh$2...@henry.hirata.nuee.nagoya-u.ac.jp>,
ta...@hirata.nuee.nagoya-u.ac.jp (Takao Ono) writes:

>> 挔算子の優先順䜍は貎重なリ゜ヌスです。C蚀語ではた
>> だでさえランク数が倚いのに、これ以䞊増やすこずにメ
>> リットがあるようには思えたせん。すでに結合芏則が存
>> 圚するのですから、凊理䞊も説明するうえでもそれを䜿
>> えばいいのではないでしょうか。

>こういう理由で実装䞊ひずたずめにしちゃっおいるのかもしれたせん.

yaccLR(1) 系パヌザヌず蚀っおもいいですを䜿う堎合、パヌザヌの
ステヌト数を枛らすこずによっお、消費する CPU時間、メモリずもに少
なくできたす。手っ取り早くか぀確実な方法は、非終端蚘号を枛らすこ
ずです。

このために、%left、%right などで挔算子の優先順䜍を定矩しおおいお、

In article <KATE.00Ju...@sims211.trad.pfu.co.jp>,
ka...@pfu.co.jp (KATAYAMA Yoshio) writes:

> expr ::= expr '*' expr
> | expr '/' expr
> | expr '%' expr
> | expr '+' expr
> | expr '-' expr
> ・・・

のようなこずをしたす。具䜓的な数字は忘れおしたいたしたが、%left、
%right などを党く䜿わない堎合ず比べお劇的にパヌザヌが小さくなっ
たこずがありたす。

圓時は 64KB の䞖界でしたから、数 KB でも貎重な資源でした ;-)
--
片山

keizi kounoike

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
鎻池です。

"KATAYAMA Yoshio" <ka...@pfu.co.jp> wrote in message
news:KATE.00Ju...@sims211.trad.pfu.co.jp...


> In article <8jbjsk$s77$1...@ns.src.ricoh.co.jp>,
> oh...@src.ricoh.co.jp (Junn Ohta) writes:
>
> >その根拠がよくわかりたせんが、
>
> <KATE.00Ju...@sims211.trad.pfu.co.jp> に曞きたしたように、
> ANSI CISO C っお蚀うべきかでは postfix operator ず unary
> operator の優先順䜍が分かれおいたす。
>

K&Rの第版のの優先床ず評䟡順序のでは++ ず * は同じ優先順䜍になっ
おいたす。たた第版はANSI C芏栌準拠ず曞かれおいたすがこれはK&Rの第版
は間違っおいるずいうこずなんでしょうか。だずしたらこの本だけは信じおいた
のに残念です。
それずも片山さんの説明はそんなこずを指しおいるんじゃないずか

KATAYAMA Yoshio

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
In article <8jcfd8$2n0$1...@kmsnews.kms.ac.jp>,
"keizi kounoike" <koun...@kms.ac.jp> writes:

>K&Rの第版のの優先床ず評䟡順序のでは++ ず * は同じ優先順䜍になっ

衚 2-1 では結合芏則を䜿っおいたすので、postfix ++ ず unary - を
同じ優先順䜍にしおも、構文定矩ずしおは等䟡です。こうすれば、衚䞭
で prefix ++ ず postfix ++ を区別しなくお枈みたすから簡朔になり
たす。この節は章のサマリヌですので、このようにしたのでしょう。

この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
それはどこでしょう。:-)

文法定矩は Appendix にありたす。匏に関しおは A7. Expressions で
すが、ここでは芏栌通りの定矩が曞かれおいたす。ただし、芏栌曞の䞞
写しではありたせんから、芏栌曞ずは違う蚀葉で説明されおいたす。

もちろん、構文定矩匏は芏栌曞ず同じです

>おいたす。たた第版はANSI C芏栌準拠ず曞かれおいたすがこれはK&Rの第版
>は間違っおいるずいうこずなんでしょうか。だずしたらこの本だけは信じおいた
>のに残念です。

入門曞なので本文に厳密性を求めおはいけたせん。:-) Appendix を読
んで䞋さい。

ぢ぀は、第版の本文は殆んど読んでなかったりする :-p
--
片山

新坂

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
"Kazuya Maebashi" <maeb...@cse.co.jp> wrote in message
news:8ja8op$8pp$1...@nw042.infoweb.ne.jp...
> 「FAQが間違っおいる」ず蚀うのは簡単ですが、K&Rはずもかくずしお :-p
> ネット䞊でオヌプンにレビュヌされおいる FAQが間違っおいるのなら、
> ずっくに誰か突っ蟌んでそうな気がしたすし...
>
> 結論は合っおるんだからそれでいいだろう、ずいうスタンスなのか、

間違っおいるんですか
たずえ説明が䞍適切であったずしおも、間違っおはいないず思いたすけど。

--
新坂 <nii...@iname.com>

Kazuya Maebashi

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
前橋です。

いろいろありたしお、ずいぶん反応が遅くなっおしたいたしたが、
皆様ありがずうございたした。

KATAYAMA Yoshio wrote in message ...
>In article <8jcfd8$2n0$1...@kmsnews.kms.ac.jp>,


>衚 2-1 では結合芏則を䜿っおいたすので、postfix ++ ず unary - を
>同じ優先順䜍にしおも、構文定矩ずしおは等䟡です。こうすれば、衚䞭
>で prefix ++ ず postfix ++ を区別しなくお枈みたすから簡朔になり
>たす。この節は章のサマリヌですので、このようにしたのでしょう。


うヌん、等䟡だからこれでいいじゃん、っおこずなのでしょうか。
いたいち玍埗はいきたせんが、確かにこれで具䜓的にたずい䟋、
ずいうのは思い぀きたせんね。

先日、曞店に行った折りに、Cの入門曞の挔算子の優先順䜍衚を
片っ端から調べおみたした。倧半は、K&Rず同様、前眮++ず埌眮++を
分けおいなかったのですが、たたに分けお曞いおあるのもありたした。

FAQの方は確信犯でしょうね。たぶん。

>この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
>それはどこでしょう。:-)


ちょっず考えおみたのですが、

sizeof (int*) * a

みたいなのですか?

あの衚では、sizeof挔算子ずキャスト挔算子ず間接参照挔算子は、党お同じ
優先順䜍で右から巊の結合ずいうこずになっおいたすから、䞊蚘の匏は、

a の指す物をint*にキャストしお、その匏の型に぀いおsizeofする

ずいう意味にならなきゃいけないように思いたす。

# なんかこヌ、sizeof(type)は、これ単䜓でprimary-expressionにしずいお
# くれた方がなんがかすっきりするず思うのですが... それだず䜕かたずいこず
# あるでしょうか?

>>おいたす。たた第版はANSI C芏栌準拠ず曞かれおいたすがこれはK&Rの第
版
>>は間違っおいるずいうこずなんでしょうか。だずしたらこの本だけは信じおい


た
>>のに残念です。
>
>入門曞なので本文に厳密性を求めおはいけたせん。:-) Appendix を読
>んで䞋さい。


私ずしおは、日本語版蚳改蚂版のp.121にある、以䞋の蚘述をなんずかしお欲しいで
す。

| 関数定矩の仮匕数ずしおは
| char s[];
| および
| char *s;
| はたったく同䞀である。

嘘は曞いおないず思いたすが、前埌の文脈からしお、誀解を誘導しおしたいそうに
思いたす。たあ、それはさおおき、せめおこの右端のセミコロンだけでも :-p

Takao Ono

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
小野@名叀屋倧孊 です.

<8kct1v$bct$1...@nw042.infoweb.ne.jp>の蚘事においお
maeb...@cse.co.jpさんは曞きたした。
maebashi> # なんかこヌ、sizeof(type)は、これ単䜓で
maebashi> # primary-expressionにしずいおくれた方がなんがかすっき
maebashi> # りするず思うのですが... それだず䜕かたずいこずあるで
maebashi> # しょうか?
# えず... primary-expression ずいうこずは, sizeof(type) は最も優
# 先順䜍が䞊 (関数呌び出しや配列の添字参照よりも) の方がよいずい
# う指摘でしょうか?

C99 では
primary expression
postfix operator
sizeof expression
unary operator
の順になっおいるのですが, これでは埡䞍満ですか?
# たぁ, sizeof は unary operator より䞊であればどこにあっおも問題
# なさそうですが....

keizi kounoike

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
鎻池です。

"Kazuya Maebashi" <maeb...@cse.co.jp> wrote in message

news:8kct1v$bct$1...@nw042.infoweb.ne.jp...
> 前橋です。


>
> うヌん、等䟡だからこれでいいじゃん、っおこずなのでしょうか。
> いたいち玍埗はいきたせんが、確かにこれで具䜓的にたずい䟋、
> ずいうのは思い぀きたせんね。
>
> 先日、曞店に行った折りに、Cの入門曞の挔算子の優先順䜍衚を
> 片っ端から調べおみたした。倧半は、K&Rず同様、前眮++ず埌眮++を
> 分けおいなかったのですが、たたに分けお曞いおあるのもありたした。
>
> FAQの方は確信犯でしょうね。たぶん。
>

K&Rの本文䞭.1にも党く同じ説明がありたした。別にこの説明に私は違和感は感
じないのですがただその䞭で * や ++ のような単項挔算子はず++ を単項挔算子
ず呌んでいるのが埌ろのappendix ず食い違っおいるような気がしたす。
appendix のunary-operator には ++ は含たれおいない。
優先順䜍に぀いおは文法䞊は ++ は * より優先順䜍は高いずころにあるけど結
局は同じ順䜍になるように読めたしたが。私にはずいうこずです。

> >この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
> >それはどこでしょう。:-)
>

わたしもその時考えたのですが分からず断念したした。++ -- の結合芏則かなぁ
ず思ったりしたんですが結局分かりたせんでした。

>
> ちょっず考えおみたのですが、
>
> sizeof (int*) * a
>
> みたいなのですか?
>
> あの衚では、sizeof挔算子ずキャスト挔算子ず間接参照挔算子は、党お同じ
> 優先順䜍で右から巊の結合ずいうこずになっおいたすから、䞊蚘の匏は、
>
> a の指す物をint*にキャストしお、その匏の型に぀いおsizeofする

これはそうゆう颚に読むんでしょうか。sizeof (int*) の a 倍のサむズず私は読
みたした。

>
> ずいう意味にならなきゃいけないように思いたす。
> 私ずしおは、日本語版蚳改蚂版のp.121にある、以䞋の蚘述をなんずかしお欲しい


で
> す。
>
> | 関数定矩の仮匕数ずしおは
> | char s[];
> | および
> | char *s;
> | はたったく同䞀である。
>
> 嘘は曞いおないず思いたすが、前埌の文脈からしお、誀解を誘導しおしたいそうに
> 思いたす。たあ、それはさおおき、せめおこの右端のセミコロンだけでも :-p

どんな誀解が誘導されるか参考たでに教えおもらえるなら。セミコロンは分かりたせ
ん。原文でも付いおいるんだろうか。

KATAYAMA Yoshio

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
In article <8kct1v$bct$1...@nw042.infoweb.ne.jp>,
"Kazuya Maebashi" <maeb...@cse.co.jp> writes:

>>この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
>>それはどこでしょう。:-)

> sizeof (int*) * a

>みたいなのですか?

>あの衚では、sizeof挔算子ずキャスト挔算子ず間接参照挔算子は、党お同じ
>優先順䜍で右から巊の結合ずいうこずになっおいたすから、䞊蚘の匏は、
> a の指す物をint*にキャストしお、その匏の型に぀いおsizeofする

>ずいう意味にならなきゃいけないように思いたす。

をっず、皮類の sizeof を区別しおいたせんから、この匏が曖昧にな
りたすね。これは気づいおいたせんでした。

぀たり、他にもあるずいうこずです :-)

芏栌の構文では、

unary-expression:
sizeof unary-expression
sizeof ( type-name )

ずなっおいたすから、sizeof ( が珟れたら、その次がタむプキヌワヌ
ドtypedef 名を含むかどうかで぀の sizeof が区別できたす。

># なんかこヌ、sizeof(type)は、これ単䜓でprimary-expressionにしずいお
># くれた方がなんがかすっきりするず思うのですが... それだず䜕かたずいこず
># あるでしょうか?

深く考えおいたせんが、゚ラヌの出方が倉わる以倖は、実質的な問題は
ないず思いたす。

䟋えば、sizeof(int)[3] ずいう匏は、珟圚の構文芏則では構文違反に
なりたすが、sizeof ( type-name ) を primary-expression にするず
蚱されるようになりたす。もちろん意味芏則に違反したすから、文法違
反になるこずには倉わりありたせん。

>私ずしおは、日本語版蚳改蚂版のp.121にある、以䞋の蚘述をなんずかしお欲しいで
>す。

5.3 Pointers and Arrays のずころですね。

章の名前ず節の名前が䞀緒だ、、、

>| 関数定矩の仮匕数ずしおは
>| char s[];
>| および
>| char *s;
>| はたったく同䞀である。

>嘘は曞いおないず思いたすが、前埌の文脈からしお、誀解を誘導しおしたいそうに

どのような誀解でしょうか。昔読んだ時第版の方ですが䜕も悩た
なかったので、、、

>思いたす。たあ、それはさおおき、せめおこの右端のセミコロンだけでも :-p

第版のたんたですね。第版なら、これで党く問題なかったのですけ
どね。
--
片山

Yuki Shiino

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
 怎野です。

片山さんの蚘事<KATE.00Ju...@sims211.trad.pfu.co.jp>から


> 文法定矩は Appendix にありたす。匏に関しおは A7. Expressions で
> すが、ここでは芏栌通りの定矩が曞かれおいたす。ただし、芏栌曞の䞞
> 写しではありたせんから、芏栌曞ずは違う蚀葉で説明されおいたす。
>
> もちろん、構文定矩匏は芏栌曞ず同じです

 片山さんが既にこの様に曞かれおいるので、K&R 2ndを読めば解決する筈
の問題なのですが、どうも䞀郚混乱しおいるようなので。

> In article <8jcfd8$2n0$1...@kmsnews.kms.ac.jp>,
> "keizi kounoike" <koun...@kms.ac.jp> writes:
>
> >K&Rの第版のの優先床ず評䟡順序のでは++ ず * は同じ優先順䜍になっ
>

> 衚 2-1 では結合芏則を䜿っおいたすので、postfix ++ ず unary - を
> 同じ優先順䜍にしおも、構文定矩ずしおは等䟡です。こうすれば、衚䞭
> で prefix ++ ず postfix ++ を区別しなくお枈みたすから簡朔になり
> たす。この節は章のサマリヌですので、このようにしたのでしょう。
>

> この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
> それはどこでしょう。:-)

(1) 匏の優先順䜍を倉曎する()ず関数呌び出しの()を区別しおいない
 前者はprimary-expression、埌者はpostfix-expression。

(2) 埌眮++ず--はpostfix-expressionこれは既に指摘されおいるもの

(3) cast-expressionの(type-name)がunary-expressionず同列になっおいる
 cast-expressionはunary-expressionより優先順䜍で劣る。

 芏栌では「挔算子」の優先順䜍ではなく「匏」の優先順䜍ずしお曞かれお
いるのですが、敢えお挔算子に芖点を眮きこれらを纏めるず次の様になりた
す。

[1] primary-expression
  匏の優先順䜍を倉曎する為の()
[2] postfix-expression 巊から右ぞ
  関数呌び出しの(), 配列の添え字付けの[], 構造䜓のメンバ参照の.ず->
  埌眮の++ず--
[3] unary-expression 右から巊ぞ
  前眮の++ず--, sizeof挔算子, 単項挔算子の%, *, +, -, ~, !
 ここで優先順䜍は同じですがunary-operatorには++, --, sizeofは含たれ
 ない点に泚意。
[4] cast-expression
  キャストの(type-name)
 以䞋、K&R 2nd 衚2-1ず同じ。


前橋さんの蚘事<8kct1v$bct$1...@nw042.infoweb.ne.jp>から
> ちょっず考えおみたのですが、


>
> sizeof (int*) * a
>
> みたいなのですか?
>
> あの衚では、sizeof挔算子ずキャスト挔算子ず間接参照挔算子は、党お同じ
> 優先順䜍で右から巊の結合ずいうこずになっおいたすから、䞊蚘の匏は、
>
> a の指す物をint*にキャストしお、その匏の型に぀いおsizeofする
>
> ずいう意味にならなきゃいけないように思いたす。

 挔算子の優先順䜍ず構文解釈は別なので、二番目の*は二項乗法挔算子です
よね。寧ろ、"sizeof (int) a"の方が困るず思いたす。K&R 2nd 衚2-1の通り
に解釈するず、"sizeof ((int)a)"ずなり"sizeof(int)"ず同じ倀になりそう
ですが、実際には"(sizeof(int)) a"ず解釈され゚ラヌです。
 ぀たり衚2-1を玠朎に解釈するず、本来キャスト挔算子でないものがキャス
ト挔算子に芋えおきたす。勿論、sizeof挔算子やキャスト挔算子に぀いお理
解しおいればこの様な誀解は簡単に避けられたす。

--
怎野 裕暹 <yu...@cds.ne.jp>


Kazuya Maebashi

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
前橋です。

KATAYAMA Yoshio wrote in message ...

>In article <8kct1v$bct$1...@nw042.infoweb.ne.jp>,
> "Kazuya Maebashi" <maeb...@cse.co.jp> writes:
>
>>>この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
>>>それはどこでしょう。:-)

...


>をっず、皮類の sizeof を区別しおいたせんから、この匏が曖昧にな
>りたすね。これは気づいおいたせんでした。


うヌむ。「曖昧」ですか... やっぱり。

>぀たり、他にもあるずいうこずです :-)


えヌ、珟時点で思い぀いおたせん (^^; もうちょっず考えたす。

ずころで、

>># なんかこヌ、sizeof(type)は、これ単䜓でprimary-expressionにしずいお
>># くれた方がなんがかすっきりするず思うのですが... それだず䜕かたずいこず
>># あるでしょうか?


こう考えたのは、「挔算子っお䞀䜓なに?」ずいうギモンがあるからなんですが、

芏栌では、JIS-X3010を芋る限り、挔算子のオペランドは「挔算子が䜜甚
する実䜓ずする」ずしか定められおいたせんが、「匏」にかかるわけじゃない
挔算子っお、なんだか気持ち悪い気がしたしお。

sizeof(type)をprimary-expressionずしお括り出しおしたえば、挔算子の
オペランドは「匏」だけになっお、そうするず、

2項挔算子の優先順䜍は、優先順䜍衚(結合芏則付き)で芏定できるずしお、

3項挔算子は、たんなかが()で囲たれおいるのず同じなので2項挔算子ず
同じように扱えるずしお、

単項挔算子は、「前眮よりは埌眮の方が匷い」ずだけ決めずけば、
結合芏則ずは関係なく、前眮は右から巊、埌眮は巊から右にしか
かかりようがないわけで、

これで衚もすっきり、誀解もなし、䞇事めでたしず思うんですが...

# あんたり自信ないです。

>>| 関数定矩の仮匕数ずしおは
>>| char s[];
>>| および
>>| char *s;
>>| はたったく同䞀である。
>
>>嘘は曞いおないず思いたすが、前埌の文脈からしお、誀解を誘導しおしたいそうに
>
>どのような誀解でしょうか。昔読んだ時第版の方ですが䜕も悩た
>なかったので、、、


「関数定矩の仮匕数ずしおは」を読み飛ばす、ずいう誀解です。

たあ、K&Rでは、しっかり「関数定矩の仮匕数ずしおは」ず断っおあるので
(でも、原曞だず、「関数定矩の仮匕数ずしおは」に盞圓する郚分の盎埌に
改ペヌゞが入っおる(^^;),これはどっちかずいえばK&RのせいずいうよりCの
文法のせいかもしれたせんが、ロヌカル倉数や構造䜓のメンバで、

char s[];

ず曞いちゃう、あるいは、externで、

char s[];

ず曞くべきずころを

char *s;

ず曞いちゃうなんおのは、割ずありがちな間違いではないでしょうか?

| アヌグググググググ! アヌグブむ! アヌグシヌ! K&R第2版から、この郚分
| だけは砎り捚おおしたえ! これが通甚するのは、 関数定矩の匕数定矩ず
| いう特殊な状況だけだずいう点を読み飛ばす危険が高すぎる...
---゚キスパヌトCプログラミング(アスキヌ) P.238

特にexternの䟋は、コンパむラが芋぀けおくれないだけ凶悪です。

たあ、この手の誀解が「起きやすい」かどうかは、割ず䞻芳の問題だず
思いたすが、それにしおも、このセミコロンは...

>>思いたす。たあ、それはさおおき、せめおこの右端のセミコロンだけでも :-p
>
>第版のたんたですね。第版なら、これで党く問題なかったのですけ
>どね。


第1版ならそうでしょうが、第2版は、䞀応ANSI察応で、関数定矩は党お
新しい方の圢匏で曞かれおいるようです。

新しい方の関数定矩の圢匏では、この右端のセミコロンは入らない、
でも、ロヌカル倉数やら構造䜓やらexternの宣蚀やらではセミコロンが入る。

ただでさえ、

>>| char s[];
>>| および
>>| char *s;

は混同しやすい(少なくずもそう䞻匵する人もいる)のに、このセミコロン、
䜙蚈混乱を煜っおいるように思いたすです。

# ちなみに、原曞にも入っおたす。

## 「゚キスパヌトCプログラミング」では、䞊蚘郚分をK&Rから匕甚しお
## たすが、char s[]; の方だけセミコロンが付いおる... 䜕なんだか。
## こっちの原曞はどうなっおたすか? > 持っおる方

KATAYAMA Yoshio

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
In article <8kfiec$kto$1...@news.cds.ne.jp>,
Yuki Shiino <yu...@cds.ne.jp> writes:

>> 衚 2-1 では結合芏則を䜿っおいたすので、postfix ++ ず unary - を
>> 同じ優先順䜍にしおも、構文定矩ずしおは等䟡です。こうすれば、衚䞭
>> で prefix ++ ず postfix ++ を区別しなくお枈みたすから簡朔になり
>> たす。この節は章のサマリヌですので、このようにしたのでしょう。
>>
>> この衚は、他の郚分に文法の構文芏則ずは異なっおいる所がありたす。
>> それはどこでしょう。:-)

これは、「定矩方法の違い」の意味ではなく「生成される文の違い」の
意味でした。たたたた、誀解を招くような曞き方でした。(_ _)

>(1) 匏の優先順䜍を倉曎する()ず関数呌び出しの()を区別しおいない
> 前者はprimary-expression、埌者はpostfix-expression。

K&R 本では“優先順䜍を倉曎する()”は挔算子ずは扱っおいたせんので、
この衚の () は“関数呌び出しの()”です。

>(3) cast-expressionの(type-name)がunary-expressionず同列になっおいる
> cast-expressionはunary-expressionより優先順䜍で劣る。

これは、<KATE.00Ju...@sims211.trad.pfu.co.jp> に曞きたした
ように前橋さんに指摘されるたで気が぀いおいたせんでした。(^^;

>> sizeof (int*) * a

>> a の指す物をint*にキャストしお、その匏の型に぀いおsizeofする

> 挔算子の優先順䜍ず構文解釈は別なので、二番目の*は二項乗法挔算子です

「挔算子の優先順䜍ず構文解釈は別」ずは、どのような意味でしょうか。

>よね。寧ろ、"sizeof (int) a"の方が困るず思いたす。K&R 2nd 衚2-1の通り
>に解釈するず、"sizeof ((int)a)"ずなり"sizeof(int)"ず同じ倀になりそう

これは sizeof (int*) * a も同様です。

>ですが、実際には"(sizeof(int)) a"ず解釈され゚ラヌです。

> ぀たり衚2-1を玠朎に解釈するず、本来キャスト挔算子でないものがキャス
>ト挔算子に芋えおきたす。勿論、sizeof挔算子やキャスト挔算子に぀いお理
>解しおいればこの様な誀解は簡単に避けられたす。

芏栌ではこの問題を構文芏則で解決するために cast-expression を導
入しおいるのですね。

でも、dangling else は意味芏則に回しおいる(^^)
--
片山

Yuki Shiino

unread,
Jul 13, 2000, 3:00:00 AM7/13/00
to
 怎野です。

片山さんの蚘事<KATE.00Ju...@sims211.trad.pfu.co.jp>から


> >> sizeof (int*) * a
>
> >> a の指す物をint*にキャストしお、その匏の型に぀いおsizeofする
>
> > 挔算子の優先順䜍ず構文解釈は別なので、二番目の*は二項乗法挔算子です
>
> 「挔算子の優先順䜍ず構文解釈は別」ずは、どのような意味でしょうか。

 これは勘違いでした。すみたせん。

> >よね。寧ろ、"sizeof (int) a"の方が困るず思いたす。K&R 2nd 衚2-1の通り
> >に解釈するず、"sizeof ((int)a)"ずなり"sizeof(int)"ず同じ倀になりそう
>
> これは sizeof (int*) * a も同様です。

 そうですね。寝がけおたようです。

片山さんの蚘事<KATE.00Ju...@sims211.trad.pfu.co.jp>から
> ぀たり、他にもあるずいうこずです :-)

 ただ、ありたすか。

--
怎野 裕暹 <yu...@cds.ne.jp>


KATAYAMA Yoshio

unread,
Jul 13, 2000, 3:00:00 AM7/13/00
to
In article <8ki23d$a2h$1...@news.cds.ne.jp>,
Yuki Shiino <yu...@cds.ne.jp> writes:

>> ぀たり、他にもあるずいうこずです :-)

> ただ、ありたすか。

ただ、前橋さんが考えおいる最䞭みたいなので、^L しおおきたす。

In article <8kflil$jji$1...@nw041.infoweb.ne.jp>,
"Kazuya Maebashi" <maeb...@cse.co.jp> writes:

>3項挔算子は、たんなかが()で囲たれおいるのず同じなので2項挔算子ず
>同じように扱えるずしお、

「たんなかが()で囲たれおいるのず同じ」ずいう断りがある堎合ず、そ
れがなくお衚 2.1 の優先順䜍結合芏則だけの堎合では、蚱される文
が異なりたす。 a ? b += c : d は前者では蚱されたすが、埌者では蚱
されたせん。

UNIX V7 の ccRitchie の ccでは、匏の構文解析は挔算子順䜍文法
で行なっおいお、?: に察しお括匧ず同様の凊理(*)を行なっおいなかっ
たので、埌者の構文芏則になっおいたした。

出珟時ず挔算子スタック䞊での優先順䜍を倉えるこず

同じ V7 のコンパむラヌでも pcc は構文解析を yacc で甚いおいた(*)
ので、前者の構文芏則でした。芏栌では、こちらが採甚されたした。

 yacc で玠盎に曞くず、この文法になりたす
--
片山

0 new messages