1. 为什么分支与循环是C语言的基石
十年前我刚入行时,师傅扔给我一本K&R的《C程序设计语言》,指着第3章说:"把这章吃透,你就能写出90%的业务代码。"那章讲的就是分支与循环。现在想来确实如此——从嵌入式设备到操作系统内核,从算法实现到业务逻辑,控制流语句构成了所有程序的骨架。
初学者常犯的错误是过早追求"炫技",却连最基本的if-else都写不利索。上周面试一个应届生,让他写个判断闰年的函数,结果出现了三层嵌套的冗余判断。这就像还没学会走路就想跑酷,基础不牢迟早要摔跟头。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 分支语句的深度解析
2.1 if-else的隐藏陷阱
看这段典型代码:
c复制if (condition)
statement1;
statement2; // 这行其实不在if作用域内!
警告:省略大括号是万恶之源!我团队曾因这个bug导致线上服务宕机2小时。现在我们的代码规范强制要求即使单行语句也要加{}。
多层嵌套时推荐这种写法:
c复制if (x > 100) {
// ...
} else if (x > 50) {
// ...
} else {
// ...
}
2.2 switch-case的优化技巧
编译器对switch的处理比if-else高效得多,特别是使用跳转表优化时。但要注意:
- case值必须是整型常量表达式
- 务必加上break,除非刻意设计fall-through
- 使用default处理意外情况
实测案例:某网络协议解析器改用switch后性能提升23%
3. 循环语句的工程实践
3.1 for循环的现代写法
传统方式:
c复制for (int i = 0; i < 10; i++)
更安全的写法:
c复制for (size_t i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
经验:循环变量尽量用size_t避免溢出,用sizeof计算数组长度防越界
3.2 while与do-while的选择
while先判断后执行,适合不确定次数的情况:
c复制while ((c = getchar()) != EOF) {
