陷阱21:不要使用逗號運算符代替分號
- C語言中,我們可以使用分號來結(jié)束一個語句,比如a = b;,這樣可以讓編譯器知道語句的邊界,以及執(zhí)行的順序。
- 但是,如果我們想要在一個語句中執(zhí)行多個表達式,就可以使用逗號運算符,比如a = (b = c, c + 1);,這樣可以讓編譯器按照從左到右的順序依次執(zhí)行表達式,并且返回最右邊的表達式的值。
- 有時候,我們會錯誤地使用逗號運算符代替分號,比如用a = b, c = d;代替a = b; c = d;,這樣會導(dǎo)致一些意想不到的結(jié)果,甚至引發(fā)錯誤。
錯誤的代碼
#include <stdio.h>int main()
{int a = 1, b = 2, c = 3, d = 4;a = b, c = d; //錯誤地使用逗號運算符代替分號printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);return 0;
}
為什么會出錯呢?
- 因為在C語言中,逗號運算符的優(yōu)先級是最低的,所以上面的代碼相當(dāng)于:
#include <stdio.h>int main()
{int a = 1, b = 2, c = 3, d = 4;a = (b, c = d); //注意這里的括號printf("a = %d, b = %d, c = %d, d