最近在看 haproxy 的源碼液南,使用了太多 goto 跳轉(zhuǎn)滑凉,實在讓人頭大喘帚。
當(dāng)一個代碼塊執(zhí)行完后會執(zhí)行哪里的代碼呢?
寫幾個例子來總結(jié)一下規(guī)律吧若未。
#include<stdio.h>
void main() {
goto block_1;
printf("Back\n");
block_1:
printf("Block_1\n");
block_2:
printf("Block_2\n");
}
# ./goto
Block_1
Block_2
block_1 的代碼執(zhí)行結(jié)束后粗合,繼續(xù)向下執(zhí)行 block_2 中的代碼乌昔。并且不會再回到調(diào)用 goto 的下一行。
#include<stdio.h>
void main() {
printf("Do something\n");
block_1:
printf("Block_1\n");
block_2:
printf("Block_2\n");
}
# ./goto
Do something
Block_1
Block_2
即使沒有 goto 語句供屉,在正常運行到 block_1 和 block_2 的時候伶丐,也會執(zhí)行內(nèi)部的代碼焙贷。