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

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

你可能感兴趣的:(微软,笔试,实习生)