关于表达式i+++i+++i++有感
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
????前幾天我看到了關(guān)于c語言中i+++i+++i++的問題討論。有認(rèn)為值是確定的,也有認(rèn)為是不確定的。我本來傾向于確定的,即well-defined。本來想NB一把,咱們翻標(biāo)準(zhǔn)準(zhǔn)確說明它就是well-defined,結(jié)果卻發(fā)現(xiàn)它是undefined。這不,一想那不是更厲害了,直接把前面認(rèn)為確定的人都否定了。當(dāng)即組織材料,自己也寫個回復(fù)。寫的出來后那是相當(dāng)?shù)挠谐删透邪?#xff0c;就等著別人來討論討論。但是我更渴望別人也覺得我觀點是對,滿足一下自己這顆虛榮心,^_^。不過好傷心啊,沒人回復(fù)。
? ? 不過話說回來啊,這個過程挺有趣的。先是自己帶著觀點去找證據(jù),結(jié)果發(fā)現(xiàn)觀點錯了,又找證據(jù)證明另一個觀點,最后把一點一點碎片組織起來,就成一篇小文章了。我想啊,那些發(fā)表論文的,當(dāng)寫完審查完那一刻肯定是相當(dāng)滿足了。開始先是一個一個的lemma, 然后是corollary, 最后就是自己的theorem了。突然感覺寫程序的過程也很像。先是小函數(shù),小函數(shù)組成大一點的函數(shù),慢慢的自己的程序也就浮現(xiàn)出來。其實,還有很多過程都很像,不是嗎?
? ? 好了,在這就再貼下自己的回答,保存下,也再成就感一下。如果有錯誤,麻煩大家給指出啦。
標(biāo)準(zhǔn)中提到tranlation有7個階段,下面是第3階段的描述(c99 5.1.1.2)
下面是說明這個式子是undefined的。其實標(biāo)準(zhǔn)里面讓它undefined的說明關(guān)鍵就一個了(c99 6.5):
所以,上訴式子是“Between the previous and next sequence point“無誤了。而且標(biāo)準(zhǔn)中還給了兩個由于6.5那段而undefined的例子:
i = ++i + 1; a[i++] = i;所以,我的結(jié)論是式子i+++i+++i++只能被分析成(i++)+(i++)+(i++),但結(jié)果是undefined。
ps:對于6.5那段的第二句我不是太理解,參考了一下別人的說法暫時理解為:如果兩個sequence points之間要改變一個object所存的值,那么之前如果有讀取此object的值,那么這個之前讀的舊值必定是用來確定新值的。
不知道理解正與否。
參考:
ISO標(biāo)準(zhǔn)
http://stackoverflow.com/questions/3978625/using-postfix-increment-in-an-l-value
http://c-faq.com/expr/seqpoints.html
轉(zhuǎn)載于:https://my.oschina.net/u/582355/blog/137168
總結(jié)
以上是生活随笔為你收集整理的关于表达式i+++i+++i++有感的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复习-网络编程之IP和端口号
- 下一篇: IOS定位核心与地图