4

重複の可能性:
変数リストのコンマはシーケンス ポイントですか?

次のコードがある場合、コンマは通常のシーケンス ポイントとして機能しますか、それとも動作は未定義ですか?

int i = 1, j = i;

私は実際にこれを使用する予定はありません (私たちの内部標準では さえ禁止されていますint i, j) が、私は興味があり、ググるのが奇妙に難しいことがわかりました.

4

1 に答える 1

13

それは明確に定義されています:

8. 宣言子: [dcl.decl]

3) 宣言内の各 init-declarator は、それ自体が宣言内にあるかのように個別に分析されます。

そしてメモ:

90) 複数の宣言子を持つ宣言は、通常、それぞれが単一の宣言子を持つ宣言の対応するシーケンスと同等です。あれは

T D1, D2, ... Dn;

通常は

T D1; T D2; ... T Dn;

ここで、T は decl-specifier-seq であり、各 Di は init-declarator です。

完全を期すために(メモには通常と書かれているため):

例外は、宣言子の 1 つによって導入された名前が dcl-specifiers によって使用される型名を隠している場合に発生します。そのため、同じ dcl-specifiers が後続の宣言で使用されている場合、struct S { ... }; S S, T;//のように同じ意味を持ちません。 struct S の 2 つのインスタンスを宣言しますwhich is not equivalent to。 struct S { ... }; S S; ST; // エラー`

于 2012-10-04T14:50:17.747 に答える