This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Some confuse about the pass of the arguments by gcc
On 02/21/2012 03:18 PM, åè wrote:
> I do a experiments to check how gcc pass the arguments.
> here is the code
>
> #include <stdio.h>
> int main(int argc , char *argv[]){
> int a=3;
> int b=3;
> int c=3;
> printf("%d %d\n",++a+c,a+c);
> printf("%d %d\n",++b,b);
> return 0;
> }
>
> the anwer is
>
> 8 7
> 4 4
>
> the piece of assembly language: gcc 4.6.2
>
> movl $3, 28(%esp)
> movl $3, 24(%esp)
> movl $3, 20(%esp)
> movl 20(%esp), %eax
> movl 28(%esp), %edx
> leal (%edx,%eax), %ecx
> addl $1, 28(%esp)
> movl 20(%esp), %eax
> movl 28(%esp), %edx
> addl %eax, %edx
> movl $.LC0, %eax
> movl %ecx, 8(%esp)
> movl %edx, 4(%esp)
> movl %eax, (%esp)
> call printf
> addl $1, 24(%esp)
> movl $.LC0, %eax
> movl 24(%esp), %edx
> movl %edx, 8(%esp)
> movl 24(%esp), %edx
> movl %edx, 4(%esp)
> movl %eax, (%esp)
> call printf
>
> In the first case , gcc first compute the a+c to %ecx ,and pass it
> stack , the compute ++a+c to %edx ,so the answer is 8 7
>
> In the second case , why it didn't do the same thing like
> compute b=3 and pass it to stack ,then compute ++b and pass it to
> stack .to the result 4 3. However it first
> addl $1, 24(%esp) ==> b+1 I think it compute the expression
> b+1. the pass it to stack . the b which now is 4 and was passed to
> stack.
>
> I was wondering why gcc handle the same mode in two ways.
>
> Is there some errors I had made ?
http://c-faq.com/expr/evalorder2.html
Andrew.