重複の可能性:
変数リストのコンマはシーケンス ポイントですか?
次のコードがある場合、コンマは通常のシーケンス ポイントとして機能しますか、それとも動作は未定義ですか?
int i = 1, j = i;
私は実際にこれを使用する予定はありません (私たちの内部標準では さえ禁止されていますint i, j
) が、私は興味があり、ググるのが奇妙に難しいことがわかりました.
重複の可能性:
変数リストのコンマはシーケンス ポイントですか?
次のコードがある場合、コンマは通常のシーケンス ポイントとして機能しますか、それとも動作は未定義ですか?
int i = 1, j = i;
私は実際にこれを使用する予定はありません (私たちの内部標準では さえ禁止されていますint i, j
) が、私は興味があり、ググるのが奇妙に難しいことがわかりました.
それは明確に定義されています:
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; // エラー`