[应用相关] C语言避坑之使用完整的条件语句

[复制链接]
1679|3
 楼主| OKAKAKO 发表于 2024-5-24 13:33 | 显示全部楼层 |阅读模式



在使用判断语句的时候,我们尤其要注意判断条件的完整性,我们许多工程师都熟悉简单的if else 语句,然而有一些工程师却没有注意到,不同的写法可能会浪费一些处理器的时间。比如:


  1. if(value == 1U)
  2. {

  3. }

  4. if(value == 0U)
  5. {

  6. }

  7. if(value == 1U)
  8. {

  9. }
  10. else
  11. {

  12. }


在第一种写法中,处理器会去判断两次,然后根据判断结果进行分支运行,但是如果我们写成第二种写法,处理器只需要判断一次就可以了。尤其是这种判断在一个大循环内部,这将浪费我们很多处理器时间。

另外为了代码具备更清晰的可读性,我们应该让 if else 成对出现,并且都是用{}把程序分割开来,这样也避免我们在调试的时候复制粘贴出现一些错误,从而影响我们调试和解决问题的进度。

  1. #include <stdio.h>

  2. int main() {
  3.     int choice;

  4.     // 提示用户输入数字
  5.     printf("Enter a number (1-3): ");
  6.     scanf("%d", &choice);

  7.     // 使用 switch 语句根据用户输入执行不同的操作
  8.     switch (choice) {
  9.         case 1:
  10.             printf("You chose option 1.\n");
  11.             // 执行操作1的代码
  12.             break;

  13.         case 2:
  14.             printf("You chose option 2.\n");
  15.             // 执行操作2的代码
  16.             break;

  17.         case 3:
  18.             printf("You chose option 3.\n");
  19.             // 执行操作3的代码
  20.             break;

  21.         default:
  22.             printf("Invalid choice. Please enter a number between 1 and 3.\n");
  23.             // 处理无效选择的代码
  24.             break;
  25.     }

  26.     return 0;
  27. }

如果判断分支比较多,一定是用 swich case 语句来代替 if else。道理是相同的,一定要完整且用{}将程序段分隔好。同时要注意,如果我们对分支的命中率有一定的前瞻性,那么我们最好把命中率比较高的分支放在前面。

对于 case 比较多的情况,有些编译器会主动优化,这时候就不必考虑命中率的问题了。

米多0036 发表于 2024-6-11 15:56 | 显示全部楼层
减少判断次数可以将多个 if 判断合并成 if-else 结构,减少重复判断。
米多0036 发表于 2024-6-11 16:00 | 显示全部楼层
使用 switch-case:当分支较多时,使用 switch-case 语句可以提高代码可读性和执行效率。
jf101 发表于 2024-6-23 14:18 | 显示全部楼层
应该让 if else 成对出现,并且都是用{}把程序分割开来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

260

主题

2096

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部