在下面的代碼在函數調用中,爲什麼逗號不是序列點?
int main(){
int a=3;
printf("%d %d %d",++a,a,a++);
return 0;
}
作爲指定,從C99附錄C:
以下是5.1.2.3中描述的序列點:
- 給函數的調用,在參數評估後 (6.5.2.2)。
- 以下操作符的第一個操作數的結尾:邏輯 AND & &(6.5.13);邏輯OR || (6.5.14);有條件? (6.5.15); 逗號(6.5.17)
函數參數的求值順序未定義,如C標準所指定。
但是,在printf的函數調用中,我們有用逗號分隔的參數,它們被分類爲序列點。那麼爲什麼這個陳述對應於未指定的行爲呢?
要清楚的是:'printf'調用中的這些逗號是* not *順序點,並且它們當然不會賦予明確未定義的'a ++'和'++ a'組合上的任何明確定義。 –