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

What is the output of the following code? html

{
    int x = 10;
    int y = 10;


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


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

A.10,10 express

B.10,11 less

C.11,10 ide

D.11,11 测试



编译器实际测试结果 spa

GCC : 11,11

VC: 11,11 code

TCC:10,11 htm



STD C99  blog

第6.5.16部分第3条 get

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

相关文章
相关标签/搜索