C语言使用细节

C Detail

细节

  1. do....while()while()的区别

    do...while(0U)的作用

    1. 确保宏定义正确展开

      如果原语句为:

      if(!value)
          foo(wolf);
      

      #define foo(x) bar(x); baz(x)的情况下,展开为:

      if(!value)
          bar(wolf);
      baz(wolf);
      //展开效果与我们期望的不符
      

      如果采用do...while(0U),则展开为:

      if(!value)
          do{
             
              bar(x);
              baz(x);
          }while(0U);
      
    2. 实现局部作用域

      #define swap(a,b) do{\
      					a = a + b;\
      					b = a - b;\
      					a = a - b;\
      				}while(0U)
      
      int main()
      {
             
          int a = 1, b = 2;
          if(1)
              swap(a,b);
          else
              a = b;
          return 0;
      }
      //展开后为
      int main()
      {
             
          int a = 1, b = 2;
          if(1)
              do{
             
                  a = a + b;
                  b = a - b;
      			a = a - b;
              }while(0U);
          else
              a = b;
          return 0;
      }
      
    3. 避免使用goto语句

      goto语句可以用来进行错误处理,但是过多的goto会使代码的维护困难,因此,采用do...while(0U)break的方法,来实现goto的功能。

      #include <stdio.h>
      #include <stdlib.h>
      
      int main()
      {
             
          int res = -1;
          if(0 != res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值