【发布时间】:2015-06-23 10:51:38
【问题描述】:
假设我有以下代码:
int i = 0;
func(i++, i++);
返回值后立即发生增量?是否保证第一个参数为0,第二个参数为1?
【问题讨论】:
-
为什么垃圾代码不断在 SO 上发布,并要求解释为什么它是垃圾?避免这样的代码是否如此困难以至于必须提出问题? FFS 停止写废话,然后询问它。
-
@MartinJames 试图理解失败的原因有什么问题?
-
@MartinJames:因为新学习者还不了解什么是垃圾,什么不是垃圾。我们的工作是认真而耐心地教他们。您曾经对 C 的工作原理有误解吗?如果是这样,你不能因为一开始有同样的误解而责怪别人。
-
@iTayb:从到目前为止的答案和 cmets 中可以看出,您发布的代码可能会非常混乱。很难弄清楚代码应该做什么。事实上,编译器也无法弄清楚——不同的编译器会给出不同的答案,而且没有一个是错误的。这个特定的代码片段既未指定也未定义。如果你想让它有明确定义的行为,你必须引入一些序列点,也许可以写
int first = i++; int second = i++; func(first, second);。 -
@SteveSummit - 不,不是。教授和助教的教。 SO 贡献者回答来自专业和爱好者程序员的问题。如果对 OP 提供的代码有疑问,OP 应该简化它,也许使用一些中间临时变量,并在发布到 SO 之前进行测试/调试:(
标签: c c89 post-increment ansi-c