最近在看 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 的时候,也会执行内部的代码。