什么是"序列点"?
未定义的行为和序列点之间的关系是什么?
我经常使用有趣和复杂的表达方式a[++i] = i;
,让自己感觉更好.我为什么要停止使用它们?
如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我的一位朋友向我展示了这个程序并问我为什么i
变量增加两次.
根据我的理解MAX(i++, ++j);
,这一行i
首先作为参数发送然后递增,所以如果初始值i
是10
则应该是递增的值11
,但它显示增加的值i
as 12
.
计划:
#include<stdio.h>
#define MAX(x,y) (x)>(y)?(x):(y)
void main(void)
{
int i = 10;
int j = 5;
int k = 0;
k = MAX(i++, ++j);
printf("%d %d %d",i,j,k);
}
Run Code Online (Sandbox Code Playgroud)
输出:
12 6 11
有人可以解释一下我的价值如何增加到12?
谢谢.