C語言運算式求值順序

來源:互聯網
上載者:User
一個C語言程式jiajia.c如下: 
#include<stdio.h>int main(){ long i; i=0; printf("%ld\n",(++i)+(++i)+(++i)); }
該程式在X86、linux機器上編譯後的運行結果為7,而在SPARC/SUNOS機器上編譯後的運行結果為6.試分析結果不同的原因。

jiajia.s

.file"jiajia.c".section.rodata.LC0:.string"%ld\n".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6subq$16, %rspmovq$0, -8(%rbp)addq$1, -8(%rbp)addq$1, -8(%rbp)//i先增加2,i=2movq-8(%rbp), %rax//移入i至DX寄存器leaq(%rax,%rax), %rdx//i+i=4addq$1, -8(%rbp)//i增加,i=3movq-8(%rbp), %rax//移入i至AX寄存器addq%rdx, %rax//4+3=7,結果存AX寄存器movq%rax, %rsimovl$.LC0, %edimovl$0, %eaxcallprintfleave.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3".section.note.GNU-stack,"",@progbits



jiajia2.c
#include<stdio.h>int main(){ long i; i=0; printf("%ld\n",(++i)+((++i)+(++i))); //改為後兩個加括弧}




結果輸出9


jiajia2.s

.file"jiajia2.c".section.rodata.LC0:.string"%ld\n".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6subq$16, %rspmovq$0, -8(%rbp)addq$1, -8(%rbp)addq$1, -8(%rbp)addq$1, -8(%rbp)//i增加至3,i=3movq-8(%rbp), %raxleaq(%rax,%rax), %rdx//i+i=6movq-8(%rbp), %raxaddq%rdx, %rax//3+3=9movq%rax, %rsimovl$.LC0, %edimovl$0, %eaxcallprintfleave.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3".section.note.GNU-stack,"",@progbits


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.