C语言中的悬挂式else
谈谈C语言中的悬挂式else
C语言并不像python这类语言有缩进的限制,所以存在悬挂式else
什么是悬挂式else
我们先看下例子。
首先说明,下面例子中的代码,都是能够在笔者主机平台(x86)使用gcc编译通过,并且每部分都可以正常运行的。
为了说明并聚焦问题,并没有使用宏来简化代码。
1 |
|
编译并查看输出:
1 | $ gcc -o test ./test_else.c |
这里并没有列出所有的情况,感兴趣的小伙伴可以自己编译试试。
其实源码中,printf包含的字符串已经说明了所有相关的可能。
小结:
- 悬挂式else的语法并不具有很好的可读性,请在使用C语言的时候加上控制块
{}
- 添加控制块
{}
后,可以避免你认为的这种歧义性 - if-else在不添加控制块符号
{}
的时候,表示后面很简短,简短到只能允许一条指令 - 请在书写代码的时候注意缩进,虽然C语言很自由,但请体谅有可能阅读你代码的其他人。
如何写出好看的C语言if-else控制流
当你阅读比较好的C项目代码的时候,你可能会感慨为何人家的代码写的这么好,一看就懂,或者控制流程很是流畅?
这个时候你其实应该停下来,等等你的灵魂,仔细花时间琢磨下为什么他们写的好。
我写一个例子,看看为什么这样写
1 |
|
执行与输出结果,同学可以自行尝试,本文代码可以正常编译运行
1 | $ ./test 5 0 |
这里没有列出所有的输出结果,不过以从源码上,已经能够说明问题了。
这样写的好处有哪些:
- 易读,流程一条线,异常很明显,都是在判断失败后处理错误逻辑
- 函数设计结构统一,返回值是精心设定的
- 好看的输出格式
设计要点:
- 前文提到,函数的返回值需要精心设计,当然,如果返回的TRUE、FALSE不能满足,其实其他的值也是可以的,只不过要多加判断
- 书写逻辑一条线,异常都在判断if失败的时候处理