能否通过短路求值消除C语言嵌套if语句并保留原有逻辑
问题结论
可以实现,完全保留原有执行逻辑。
原有逻辑拆解
结合代码注释,原有代码的明确执行规则如下:
- 仅当
x != NULL 且 y > 5时,执行printf("Hello!\n"); - 仅当
x == NULL时,执行printf("Goodbye!\n"); - 其余情况两个打印都不执行,最终统一返回0。
改写思路
利用C语言逻辑运算符的短路求值特性,以及printf函数成功打印时返回值为非0整数的特性,将执行语句嵌入到条件判断表达式中,即可消去内层if,无需嵌套结构。
改写后完整代码
int *x; int y; if ( (x == NULL && printf("Goodbye!\n")) || (y > 5 && x != NULL && printf("Hello!\n")) ) { // 所有业务逻辑已通过短路求值在条件判断中完成,块内无需额外代码 } return 0;
逻辑一致性验证
- 当
x == NULL成立时:&&短路规则会执行后续的printf("Goodbye!\n"),该表达式返回非0,因此||左侧整体为真,直接短路||右侧的所有判断,不会执行Hello的打印,完全符合要求。 - 当
x == NULL不成立时:||左侧为假,必须判断右侧逻辑:- 若
y > 5不成立:右侧&&链直接短路,整体if条件为假,无任何打印,符合要求。 - 若
y > 5成立:继续判断后续的x != NULL(此时必然成立),随后执行printf("Hello!\n"),无Goodbye打印,完全符合要求。
- 若
内容的提问来源于stack exchange,提问作者user12787203
相关产品推荐
相关产品推荐

