1

「C How to Program 6th edition - page 119」は、++演算子の結合性は「右から左」であると述べています。++ は単項演算子であるため、これはどういう意味なのだろうか。どのような場合に単項演算子の結合性が発生するのでしょうか? 例を教えてください。

一方、一部のネット リソースは、状態 (前置または後置) に基づいて ++ 演算子に異なる結合性を与えます。この本は接尾辞と接頭辞を一緒に「右から左へ」の結合性を与えていますが、どちらが正しいですか?

について例を挙げていただければ、感謝いたします。連想性も。

感謝と敬意

4

3 に答える 3

1

「C How to Program 6th edition - page 119」は、++演算子の結合性は「右から左」であると述べています。++ は単項演算子であるため、これはどういう意味なのだろうか。どのような場合に単項演算子の結合性が発生するのでしょうか?

Kernighan/Ritchie による「The C Programming Language, Second Edition, ANSI C」にも、このように書かれています。明らかに、このアサーションは prefix と postfix を区別しません++が、それでも true と見なすことができます。unary-expression を考えてみましょう++E++。(これは構文的に正しいですが、オペランドが左辺値でなければならないという制約に違反しているため、意味的に間違っているだけです。) これは構文エラーを構成せず、 と同等++(E++)です。この結合性を観察できるかどうかは、とりわけコンパイラのエラー メッセージの表現力に依存します。--E++同様の式( と--同じ優先順位を持つ)を使用して、たとえば gcc に教えてもらうことができます++。それはメッセージを生成します

error: lvalue required as decrement operand

右側のインクリメント演算子が最初に関連付けられたことを示しています。

于 2015-06-29T07:28:00.343 に答える
0

結合性は、引数に複数の演算子が適用されている場合にのみ関係します。グループ 3 のすべての演算子は同じ優先度を共有します。そのグループから複数の演算子を引数に適用した場合、それらはそのグループの結合規則に従って解決されます (この場合は右から左)。

~++x != ++~x

++ は確かに接尾辞が LTR で、接頭辞が RTL です。

于 2014-11-14T12:17:49.780 に答える
0

C 構文は文法によって定義されます。「優先順位」と「結合順序」は C 標準の一部ではありません。「優先順位表」の目的は、人間がすべての文法を読まなくてもすぐに参照できるようにすることです。そのような表は、文法が行うすべてを正確に捉えていないことがあります。

演算子は演算子を操作できないため、単項演算子で「結合性」を使用してもあまり意味がありません。そのようなコメントは無視することをお勧めします。

たとえば、E++++のみ(E++)++、および++++Eのみであることができます++(++E)。この言語では が許可されていませんが(++(++))E、他の言語ではそのようなことが許可されている可能性があります。

于 2015-06-29T08:05:13.543 に答える