2012-08-30 7 views
5

について:subsriptingC11標準から引用配列添字演算子

アレイ(6.5.2.1条)

添字オペレータ[]の定義はE1[E2](*((E1)+(E2)))と同一であることです。

私は(*(E1+(E2)))(*((E1)+(E2)))異なる可能性がある表現ですなわちE1必要な(彼らはC89標準で失われていた)、周りのブラケットがある理由を知りたいのですが?

+0

私の前提は、E2がE1の前に評価されているということです。後者は優先順位を与えず、括弧も等しく入れ子になっています。理由は分かりません。 –

+8

私はその行や標準の行を書いていませんでしたが、私のGUESSは "E1"と "E2"は式であることを意味しています。それを説明に「コピー&ペースト」します。 –

+0

@ChristianStieberと完全に一致します。あなたが '+'と '[]'は異なる優先順位を持っていることを念頭に置いておかなければならないので、 'E1'が' + 'の後ろに異なる方法でバインドすることができます。 –

答えて

9

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n841.htmによれば、分かりやすくするために挿入されています。 2つの表現は、構文的に同等です。

パブリックコメント番号PC-UK0103
コメント1
カテゴリー:社説変更/非規範的な貢献
委員会草案のサブセクション:6.3.2.1
タイトル:配列添字例
詳細な説明

パラグラフ2は、 の混乱を避けるために、「(*(E1+(E2)))」を「(*((E1)+(E2)))」に置き換える必要があります。はい、私は構文図によってかなり が明確になりますが、段落2の現在の文言は非常に混乱しています。