4

可能重复:
变量列表中的逗号是序列点吗?

如果我有以下代码,逗号是否充当正常序列点,或者行为未定义?

int i = 1, j = i;

我实际上并不打算使用它(我们的内部标准禁止使用 even 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。

为了完整性(因为注释通常说):

当其中一个声明符引入的名称隐藏了 dcl 说明符使用的类型名称时会发生异常,因此当在后续声明中使用相同的 dcl 说明符时,它们的含义不同,如struct S { ... }; S S, T;//声明 struct S 的两个实例which is not equivalent tostruct S { ... }; S S; 英石; // 错误`

于 2012-10-04T14:50:17.747 回答