【发布时间】:2012-10-04 14:48:48
【问题描述】:
如果我有以下代码,逗号是否充当正常序列点,或者行为未定义?
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 是一个 初始化声明器。
为了完整性(因为注释说通常):
当其中一个声明符引入的名称时发生异常 隐藏 dcl 说明符使用的类型名称,这样当相同的 dcl 说明符在随后的声明中使用,它们没有 含义相同,如
struct S { ... }; S S, T;// 声明两个 struct Swhich is not equivalent tostruct S { ... } 的实例;小号 小号;英石; // 错误`
【讨论】: