C語言短路現(xiàn)象算是C語言的基礎(chǔ)吧,不過有時(shí)候代碼寫得不規(guī)范也容易引入一些bug,所以這些操作在工程師實(shí)踐中盡量少用。
雖然下面找的例子比較簡(jiǎn)單,但如果后面是其他表達(dá)式,或許你并不會(huì)那么容易分辨。并且,你可能會(huì)斬釘截鐵的說,我絕對(duì)不會(huì)這樣編寫我的代碼,但你確定的同事不會(huì)這樣?你的前同事不會(huì)?好了,下面的案例來源于網(wǎng)絡(luò),僅供參考:短路現(xiàn)象1如有以下表達(dá)式:
a&&b&&c
只有a為真(非0)才需要判斷b的值;只有a和b都為真,才需要判斷c的值。
舉例
求最終a、b、c、d的值。
main()
{
inta,b,c,d;
a=0;
b=1;
c=2;
d=a++&&b++&&--c;
printf("a=%db=%dc=%dd=%d\n",a,b,c,d);
}
因?yàn)閍++是先判斷a的值再自加,而a初始值為0, 所以(a++)為假,由短路現(xiàn)象可知&&后面式子b++和--c就都不會(huì)執(zhí)行;對(duì)于賦值語句,是先將a的值賦值給d,然后再自加,所以d的值為0,a最終為1。
執(zhí)行結(jié)果:
短路現(xiàn)象2
比如有以下表達(dá)式:
a||b||c
只要a為真(非0)就不必判斷b和c;只有a為假,才需要判斷b的值;只有a和b都為假,才有必要判斷c的值。
舉例
求最終a、b、c、d的值;
main()
{
inta,b,c,d;
a=0;
b=1;
c=2;
d=a++||b++||--c;
printf("a=%db=%dc=%dd=%d\n",a,b,c,d);
}
因?yàn)閍++是先判斷a的值再自加,而a初始值為0, 所以(a++)為假,由短路現(xiàn)象可知,還需要繼續(xù)判斷 || 后面的表達(dá)式b++,b++要先判斷b的值,b為1,所以b++為真,由短路現(xiàn)象可知,后面的式子--c就不在執(zhí)行;對(duì)于賦值語句,不再是將a的值賦值給d,而是將b先賦值給d然后a和b再自加,所以d的值為1,a最終為1,b最終為2。
執(zhí)行結(jié)果:
本文轉(zhuǎn)載自公眾號(hào)|嵌入式與Linux那些事
如有侵權(quán) |聯(lián)系刪除
-
C語言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135858 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68231
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論