zoukankan      html  css  js  c++  java
  • C语言-define 与do{}while(0)

    问题引出:

    我们都知道宏定义#define只是简单替换,所以遇到复杂的带参数宏,必须很小心的为需要的参数加上括号“()”;同样碰到复杂的多条语句替代,虽然加{}可以将其封装成一个整体,但同时又有另一个问题:与语法习惯的冲突。比如:

    #include <stdio.h>

    void print_1(void)
    {
     printf("print_1 ");
    }

    void print_2(void)
    {
     printf("print_2 ");
    }

    #define  printf_value()    
      {     
      print_1();     
      print_2();

      }


    int main( void )
    {
     int i=0;
     if(i==1)
     
     else
      printf("add else word!!!");printf_value();

     return 0;
    }

    上面的经过编译后会报错:if与else不匹配。怎么可能?将宏带入发现“printf_value();”后面确实多了一个分号,从而导致if与else的不匹配。但是去掉又不和c语言的习惯,因为C规定每条语句后面必须加分号。

      所以解决的办法就是用do{}while(0)同样只执行一次,且将其看成一个整体,同时又兼容了C的习惯,一举多得

    二 用define重定义中断向量:在stm32中的中断函数比如串口中断如果你要用define重定义,然后需要将在stm32fnxx_it.c中包含相应的头文件否则容易出错

  • 相关阅读:
    简单 || 复杂
    命令行参数 && json 协议 && 自定义 error 类型
    Circos安装 (转+总结)
    ggplot2—Pathway富集分析气泡图
    ggplot2绘图
    linux常用命令小结
    生信学习网站
    Perl学习建议(转)
    R作图函数(转)
    Android viewPager+fragment实现滑页效果
  • 原文地址:https://www.cnblogs.com/jieruishu/p/3896745.html
Copyright © 2011-2022 走看看