程序员圈子流传一句著名的段子:世界上最遥远的距离不是生与死,而是你在 if,而我在 else 里。
是否就果真一次执行下来,二分支,二选一,if 与 else 非此即彼,只能进入一个?
0. 顺序执行时,不同的分支之间是互斥的
即 if 与 else if,这些不同的分支在对空间进行切分时,如果互有重叠,是无意义的;
if (ch == 'X' || ch == 'Y') {
...
} else if (ch == 'X') {
...
} else {
...
}
如果 ch = 'X';
,最终程序不会进入if (ch == 'X' || ch == 'Y')
也进入 else if (ch == 'X')
,所以一个合理的逻辑是:
if (ch == 'X' || ch == 'Y') {
if (ch == 'X') {
...
} else {
...
}
}
1. fork
#include <stdio.h>
#include "unistd.h"
int main(void){
pid_t pid;
if ((pid = fork()) == 0){
printf("我在 if 里!\n");
} else {
printf("我在 else 里!\n");
}
return 0;
}
输出为:
我在 else 里!
我在 if 里!
2. 使用 setjmp/longjmp
#include <setjmp.h>
#include <stdio.h>
jmp_buf buf;
void func(){
longjmp(buf, 1);
}
int main(void){
int i = 0;
i = setjmp(buf);
if (i == 0){
printf("我在 if 里!\n");
func();
} else {
printf("我在 else 里!\n");
}
return 0;
}