相關問題:Any good reason why assignment operator isn't a sequence point?是i = f();當f修改我時定義?
從comp.lang.c FAQ我會推斷下面的程序是未定義的。奇怪的是,它只提到f
作爲一個序列點,在參數的計算和控制轉移到f
之間。從f
回到調用表達式的控制轉移不會列爲序列點。
int f(void) { i++; return 42; }
i = f();
它真的沒有定義?
作爲一個結束語,我補充了很多我的問題,我對靜態分析的上下文感興趣。我不是自己寫這個,我只是想知道我是否應該在其他人編寫的程序中提出警告。
對於任何可能引起關注的人來說,「你總是可以試用它」對於「X是一個未定義的行爲?」從來都不是正確的答案。 – 2011-05-19 07:35:58
+1,但也要注意UB不一定是壞的。 C不禁止使用UB,它只是說「我不知道會發生什麼,希望你能做到。」 – Philip 2011-05-19 11:33:07
UB不好。與實現定義的行爲不同,編譯器作者的預期用法是,即使在同一編譯器的不同版本之間,行爲也可能會發生變化,並根據有效代碼的最佳服務優化進行更改。 – 2011-05-19 11:40:52