以下未定义或实现定义:
int x = 0;
printf("%d%d", ++x, x);
评估参数的顺序未指定,因此:
++x
,则会打印11
。x
,则会打印10
。答案 0 :(得分:3)
printf("%d%d", ++x, x);
这显然是C ++中未定义的行为。
(C ++ 11,1.9p15)“如果对标量有副作用 对于相同标量对象的另一个副作用或值计算,对象未被排序 使用相同标量对象的值,行为未定义。“
同样的C(强调我的):
(C99,6.5.p2)“在上一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.72)此外,先前的值应该是只读的确定要存储的值 .73“
请注意,C11现在具有与C ++ 11中类似的措辞:
(C11,6.5p2)“如果对标量对象的副作用相对于对同一标量对象的不同副作用或使用相同标量对象的值进行值计算未被排序,则行为未定义。 “