我試圖讓我對C中序列點的理解 - 只是想檢查一下。目前,我認爲(1)是不確定的,而(2)僅僅是沒有說明的,因爲在(2)中,在評估參數g
和h
(因此我們不修改i
兩次序列點),但f
參數的評估順序仍未明確。我的理解是否正確?以C調用函數時的序列點以及未定義/未指定的行爲
#include <stdio.h>
int g(int i) {
return i;
}
int h(int i) {
return i;
}
void f(int x, int y) {
printf("%i", x + y);
}
int main() {
int i = 23;
f(++i, ++i); // (1)
f(g(++i), h(++i)); // (2)
return 0;
}
編輯:
看來關鍵的一點是這裏的編譯器是否可以自由地執行這兩個無論是g
或h
之前的增量被稱爲 - 我從下面的答案的理解是,它是,雖然我很欣賞確認情況。
恩,不要那樣做! :) –
@MichaelDorgan:我不會:)我正在研究一個靜態分析工具來幫助阻止人們做這樣的事情,這個區別可能很重要。 –