【发布时间】:2021-05-20 11:29:56
【问题描述】:
是
int main()
{
int a;
int b = (a = 0, a) + (a = 1, a);
}
定义?如果在每个术语中没有, a,由于对a 的多次未排序写入,程序行为显然是未定义的,但是, 是否没有引入足够的排序点?
【问题讨论】:
-
@Answerers,请随意删除 language-lawyer 标签。
-
否;括号分隔序列。 (而你得到的序列除了强化定义的行为部分之外什么都不做)。
-
我们同意永远不要编写这样的代码,即使它是已定义的行为。
-
@Jabberwocky 好吧,特别是如果行为未定义;-)
-
逗号运算符正好有 3 种用途: - 返回值的 icky 类似函数的宏 - 序列点语言律师辩论 - 代码高尔夫。
标签: c language-lawyer