如果我有以下代码,逗号是否为正常序列点,或者行为未定义?
int i = 1, j = i;
我实际上并不打算使用这个(我们的内部标准甚至禁止int i, j
),但我很好奇,谷歌也很奇怪。
答案 0 :(得分:13)
明确界定:
3)声明中的每个init-declarator都会被单独分析,就好像它本身就是声明一样。
并注意:
90)有几个声明者的声明通常相当于 相应的声明序列,每个声明都有一个 声明符。那是
T D1, D2, ... Dn;
通常与
等价
T D1; T D2; ... T Dn;
其中T是decl-specifier-seq,每个Di是a INIT说明符。
对于完整性(因为注释说通常是):
当其中一个声明符引入名称时会发生异常 隐藏了dcl-specifiers使用的类型名称,以便在相同时使用 dcl-specifiers用于后续声明,它们没有 相同的含义,如
struct S { ... }; S S, T;
//声明两个 struct Swhich is not equivalent to
struct S {...}的实例;小号 S; S T; //错误