您的位置:首页 > 其它

微软2013暑期实习笔试题目第5题分析

2013-04-08 00:00 393 查看
What is the output of the following code?

{
int x = 10;
int y = 10;

x = x++;
y = ++y;

printf("%d,%d\n",x,y);
}

A.10,10

B.10,11

C.11,10

D.11,11

编译器实际测试结果
GCC : 11,11

VC: 11,11

TCC:10,11

STD C99

第6.5.16部分第3条

An assignment operator stores a value in the object designated by the left operand. An
assignment expression has the value of the left operand after the assignment, but is not an
lvalue. Thetype of an assignment expression is the type of the left operand unless the
left operand has qualified type, in which case it is the unqualified version of the type of
the left operand. The side effect of updating the stored value of the left operand shall
occur between the previous and the next sequence point.

VC反汇编结果

x = x++;
004113DC mov eax,dword ptr [x]
004113DF mov dword ptr [x],eax
004113E2 mov ecx,dword ptr [x]
004113E5 add ecx,1
004113E8 mov dword ptr [x],ecx
y = ++y;
004113EB mov eax,dword ptr [y]
004113EE add eax,1
004113F1 mov dword ptr [y],eax
004113F4 mov ecx,dword ptr [y]
004113F7 mov dword ptr [y],ecx

到现在为止合理的答案是D

不过,如果令

d = (x = x++);

TCC、VC的输出,d为10,很费解。

原题

http://www.cnblogs.com/justcxtoworld/archive/2013/04/06/3002719.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微软 实习生 笔试