- 相關(guān)推薦
這段代碼打印出56嗎
使用我的編譯器,下面的代碼int i=7; printf(“%d\n”, i++ *i++); 返回49?不管按什么順序計算, 難道不該打印出56嗎?
盡管后綴自加和后綴自減操作符++ 和– 在輸出其舊值之后才會(huì )執行運算,但這里的“之后”常常被誤解。沒(méi)有任何保證確保自增或自減會(huì )在輸出變量原值之后和對表達式的其它部分進(jìn)行計算之前立即進(jìn)行。
也不能保證變量的更新會(huì )在表達式“完成” (按照ANSI C 的術(shù)語(yǔ), 在下一個(gè)“序列點(diǎn)” 之前, 參見(jiàn)問(wèn)題3.7) 之前的某個(gè)時(shí)刻進(jìn)行。
本例中, 編譯器選擇使用變量的舊值相乘以后再對二者進(jìn)行自增運算。
包含多個(gè)不確定的副作用的代碼的行為總是被認為未定義。(簡(jiǎn)單而言, “多個(gè)不確定副作用” 是指在同一個(gè)表達式中使用導致同一對象修改兩次或修改以后又被引用的自增, 自減和賦值操作符的任何組合。
這是一個(gè)粗略的定義; 甚至都不要試圖探究這些東西在你的編譯器中是如何實(shí)現的(這與許多C 教科書(shū)上的弱智練習正好相反);
正如K&R 明智地指出, “如果你不知道它們在不同的機器上如何實(shí)現, 這樣的無(wú)知可能恰恰會(huì )有助于保護你。”
【這段代碼打印出56嗎】相關(guān)文章:
這樣“打”法能不笑嗎?爆笑06-05
過(guò)濾HTML代碼08-29
撐過(guò)這段最難熬的日子說(shuō)說(shuō)12-13
電腦藍屏代碼大全08-14
對這段感情我已徹底失望的句子10-21
參考文獻代碼大全03-24