2012-04-10 8 views
2

C言語の演算子の連想性について言えば、同じ優先順位を持つ演算子の間に相違点があるのはなぜだろうかと思っていました。例えば、後置インクリメントと後置インクリメントは結合性を残しました。接頭辞のインクリメントと接頭辞のデクリメントは正しい連想性を持っています。すべての同じ優先順位演算子に対して左または右の結合性を持つことは簡単ではありませんか?なぜCの演算子の間には異なる関連性がありますか?

それには何らかの理由がありますか?

答えて

7

同じ優先順位演算子のすべての に対して左または右の結合性を持たせるのは簡単ではありませんか?

はいとit is the case in Cです。 接頭辞と接尾辞の間に同じ優先順位があると思われるかもしれません。間違っているのはです。 Postfixはプレフィックスよりも優先順位が高い!

また、特定の事業者が一定の関連性を持っている理由にとして考慮すべき別の好奇心が強い場合があります。 Wiki

から例えば、Cにおいて、割当A = Bは の副作用はこの値に設定して 値を返す式(即ち、BはAの型に変換されます) 。代入は、式の中の の中で実行できます。 (式は の後にセミコロンで表記することができます。つまり、a = bは式ですがa = b; は文です)。 =演算子の右結合は、a = b = cのような式 をa =(b = c)、 と解釈し、aとbの両方をcの値に設定します。 a = bは左辺値ではないため、代替(a = b)= cは意味をなさない。

0

バイナリ演算子はすべて、右結合型の代入演算子を除いて左結合型です。

Postfix演算子は右結合であると言われることがありますが(K & R 2ndの例)、単項演算子よりも優先順位が高いという考えを表現することがあります。

+0

Cの演算子の優先順位に関して、K&R(第2版48ページ)の表が混乱しているのは、同じ優先順位のグループに誤って接尾辞と接頭辞を付けることです。これは、K&Rが教授/学習Cのために使用されるべきではない多くの多くの理由の1つであり、本は誤りと悪い習慣で満たされている。 – Lundin

+0

@ lundin、Cの作成者の本はどのようにエラーで満ちているべきか面白い! – Shahbaz

+1

@Shahbazそれは本当に奇妙ではありません。元の本は暗黒時代に書かれていましたが、Cが標準化される前でさえ、良いプログラミング実践が発明されるまでさえなかったのです。この本は、ANSI/ISO標準化に伴い第2版に更新されましたが、過去から多くの間違いや奇妙な点が引き継がれています。そしてこの本は最新の基準に更新されていない。とにかく、20年以上前のコンピュータサイエンスブックは、おそらく時代遅れとみなされるはずです。 – Lundin

関連する問題