可能重复:
变量列表中的逗号是序列点吗?
如果我有以下代码,逗号是否充当正常序列点,或者行为未定义?
int i = 1, j = i;
我实际上并不打算使用它(我们的内部标准禁止使用 even int i, j
),但我很好奇,它被证明对谷歌来说非常棘手。
可能重复:
变量列表中的逗号是序列点吗?
如果我有以下代码,逗号是否充当正常序列点,或者行为未定义?
int i = 1, j = i;
我实际上并不打算使用它(我们的内部标准禁止使用 even int i, j
),但我很好奇,它被证明对谷歌来说非常棘手。
它定义明确:
3) 声明中的每个 init-declarator 都被单独分析,就好像它本身在声明中一样。
并且注意:
90) 一个带有多个声明符的声明通常等同于相应的声明序列,每个声明都带有一个单独的声明符。那是
T D1, D2, ... Dn;
通常相当于
T D1; T D2; ... T Dn;
其中 T 是一个 decl-specifier-seq 并且每个 Di 是一个 init-declarator。
为了完整性(因为注释通常说):
当其中一个声明符引入的名称隐藏了 dcl 说明符使用的类型名称时会发生异常,因此当在后续声明中使用相同的 dcl 说明符时,它们的含义不同,如
struct S { ... }; S S, T;
//声明 struct S 的两个实例which is not equivalent to
struct S { ... }; S S; 英石; // 错误`