2016-07-01 8 views
2

は、Cの式ですか?の優先順位! * ++はかっこが必要ですか?</p> <pre><code>!(*(++buffer)) </code></pre> <p>同じもののように:</p> <pre><code>!*++buffer </code></pre> <p>

+1

http://en.cppreference.com/w/cpp/language/operator_precedence – dasblinkenlight

+0

平衡括弧を配置する唯一の方法は、トークンを分割することです。これは許可されていません。 –

+0

@Rhymoidのトークンは、関連付けが行われる前に行われます。 –

答えて

5

はいこれらは本質的に同じです。表現があいまいであるため、ここでは優先順位は画像には入りません。

服従*++の結果に依存し、!の引数が表現*++bufferの結果です。したがって、他の順序は単純にできません。 (信じられない場合は、式の結果が異なるように括弧(...)を入れてみてください)

括弧を入れてもかまいませんが、

+0

は、読みやすさと理解を容易にするために、常にコードを書いてください。一般的に、絶対に必要ではない場合でも括弧を使用することを意味します。注意:誰もが完全な「C演算子優先順位」テーブルを記憶しているわけではありません。 – user3629249

1

ここでは括弧は必要ありません。

operator precedence tableによると、単項++接頭演算子、単項演算子indirecton *、および単項NOT論理演算子!すべて同じ優先レベルを持っている、と彼らは右から左に関連付けます。

また、bufferは大きな式に含まれる唯一のベース式であるため、演算子が一致する他の方法はありません。

+1

非常に特殊なケースとして、 '+++ i'と同様の難読化された人工的な表現のために、かっこが必要かもしれません。 IIrcコンパイラは '+(++ i)'( "max munch")のように扱います。これは '+(++ i)'がコンパイルされる間、インクリメントする左辺値がないのでコンパイラエラーを起こします。 – Lundin

2

括弧を使用してください。

後でプログラマーが心配して混乱することはありません。あなたがわからない場合は、かっこを使用してください - 彼らは無料です。

+0

合意:通常、可読性は最少よりも重要です。 –

関連する問題