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