最近在看 haproxy 的源碼,使用了太多 goto 跳轉,實在讓人頭大。
當一個代碼塊執行完后會執行哪里的代碼呢?
寫幾個例子來總結一下規律吧。
#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 的代碼執行結束后,繼續向下執行 block_2 中的代碼。并且不會再回到調用 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 的時候,也會執行內部的代碼。