宏制造Bug

发布时间 2023-06-06 15:53:12作者: 马角的逆袭

目录

    • 原理:多行代码可以缩成一行宏定义,坏习惯--单行if不加大括号

       // 定义一个宏INIT_MAIN,实际是两个函数check_ping和start_nginx,而且没有括号
       #define INIT_MAIN  check_ping(); start_nginx(); 
       if(flag)  // 不加大括号的坏习惯
         INIT_MAIN;
      

      如上,会导致无论如何都执行start_nginx函数

    • 解决方法:加上do { } while(0);

       #define INIT_MAIN  do { check_ping(); start_nginx(); } while(0);