一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

i=1,為什么 ( i)+( i)=6?

 西北望msm66g9f 2020-07-07
源碼

#include 'stdio.h'

int main(void)
{
int i = 1;
printf('%d\n',(++i) +(++i));
return 0;
}

執(zhí)行

weiqifa@bsp-ubuntu1804:~/c/undif$ gcc g.c && ./a.out
6
weiqifa@bsp-ubuntu1804:~/c/undif$

為什么出現(xiàn)這個鬼現(xiàn)象?

原因很簡單,C語言的法律里面沒有定義這條規(guī)格,這個屬于C語言的未定義行為,也就是擦邊球,什么是擦邊球呢?就是這些行為不是錯誤的行為,法律沒有明確定義的,所以就是擦邊球。

它的執(zhí)行順序是這樣的

int i = 1;
++i ;//i = 2
++i ;//i = 3
i + i ; //輸出6

反匯編看看

weiqifa@bsp-ubuntu1804:~/c/undif$ gcc -S g.c
weiqifa@bsp-ubuntu1804:~/c/undif$ cat g.s
.file 'g.c'
.text
.section .rodata
.LC0:
.string '%d\n'
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl $1, -4(%rbp)
addl $1, -4(%rbp)
addl $1, -4(%rbp)
movl -4(%rbp), %eax
addl %eax, %eax
movl %eax, %esi
leaq .LC0(%rip), %rdi
movl $0, %eax
call printf@PLT
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident 'GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0'
.section .note.GNU-stack,'',@progbits
weiqifa@bsp-ubuntu1804:~/c/undif$ ls

我們不用關(guān)注所有的代碼,分析下面幾行關(guān)鍵的

subq $16, %rsp
movl $1, -4(%rbp) //相當(dāng)于 i = 1
addl $1, -4(%rbp) //相當(dāng)于 i +1
addl $1, -4(%rbp) //相當(dāng)于 i +1
movl -4(%rbp), %eax // 把rbp寄存器傳給eax寄存器
addl %eax, %eax //相當(dāng)于 i + i

看完這個代碼后,應(yīng)該知道為啥輸出的是 6 了吧?

最后

我認(rèn)為一個是編譯器執(zhí)行順序的問題,反匯編無非就是搞清楚C的執(zhí)行順序,而且我認(rèn)為研究這個是有意義的,不過有意義不代表可以這樣寫代碼。

C本身是偏底層的東西,了解編譯的原理和過程是非常重要的。

但是了解也不能這樣瞎用,還是要遵守規(guī)則,要不然,這樣導(dǎo)致的bug估計要害死很多人。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美中文字幕日韩精品| 大香蕉久久精品一区二区字幕| 日本理论片午夜在线观看| 久久精品中文扫妇内射| 中文字幕一区久久综合| 日本不卡在线视频中文国产| 国产不卡免费高清视频| 国产成人亚洲精品青草天美 | 日韩视频在线观看成人| 五月综合婷婷在线伊人| 日本亚洲欧美男人的天堂| 欧美日本亚欧在线观看| 国产又粗又猛又长又大| 亚洲免费视频中文字幕在线观看 | 少妇在线一区二区三区| 亚洲欧美国产精品一区二区| 在线免费观看一二区视频| 国产精品尹人香蕉综合网 | 亚洲国产综合久久天堂| 亚洲中文字幕亲近伦片| 日韩毛片视频免费观看| 麻豆欧美精品国产综合久久| 久久人人爽人人爽大片av| 偷拍美女洗澡免费视频| 日韩精品中文字幕亚洲| 国产日本欧美韩国在线| 亚洲婷婷开心色四房播播| 婷婷一区二区三区四区| 亚洲中文在线男人的天堂| 五月激情婷婷丁香六月网| 国产香蕉国产精品偷在线观看| 中文字幕久久精品亚洲乱码| 亚洲欧美日韩网友自拍| 九九热精品视频免费观看| 青青草草免费在线视频| 国产高清视频一区不卡| 一区二区免费视频中文乱码国产 | 九九热精品视频免费观看| 久久亚洲国产视频三级黄| 中文字日产幕码三区国产| 中文字幕五月婷婷免费|