zoukankan      html  css  js  c++  java
  • #if 和 #ifdef 条件编译注意

    之前写程序很少用到这两个条件编译,只是在头文件的开头使用过 #ifdef ....<CODE>....  #endif,他是防止头文件被重复包含,导致的变量被多处声明或定义。

    最近写程序发现 #if ...... #endif  也是特别好用的。

    #if

    他的后面是接一个表达式

    #if (if_need_display)
            //使用C语言库函数 sprintf() 把数字强制转换为字符串输出,这样真的可以减少很多工作量,比上面简单太多了。
            sprintf(distance,"%.2f",real_distance);
            show_string(5+72,10,distance);
    #endif

    这个后面我跟了一个定义的宏,if_need_display,当我需要使用中间那段代码的时候,只需把这个变量宏定义为1就可以了。

    就是当表达式为真(非零值)时,那么编译器就会把 #if 与 #endif 之间的代码编译进去。它多用在需要调试的代码中。

    因为有些代码非常占程序的体积,或者非常消耗单片机的资源 ,但是它在调试的时候又比较有用,调试完之后,就用不到了,比如串口,显示屏什么的。

    这个时候, #if 就显得特别的贴心,温暖。

    #ifdef 

    #ifdef 后面跟一个宏,这个宏可以没有值,只要在前面这个宏被定义了出来,就编译中间的代码。

    #define if_need_display
    
    #ifdef if_need_display
            //使用C语言库函数 sprintf() 把数字强制转换为字符串输出,这样真的可以减少很多工作量,比上面简单太多了。
            sprintf(distance,"%.2f",real_distance);
            show_string(5+72,10,distance);
    #endif

    这里,我宏定义了if_need_flag ,所以会编译中间的代码,否则忽略。

  • 相关阅读:
    Revit二次开发示例:DisableCommand
    Revit二次开发示例:DesignOptions
    C# 非模式窗体show()和模式窗体showdialog()的区别
    Revit二次开发示例:DeleteObject
    被动永远做不好运维
    sudo开发常用命令总结
    ansible 配置了端口在host文件但是还要走22 ip:60001 ansible_ssh_port=60001
    ansible wc -l 对结果值取大小的操作
    mha切换脚本可用的
    mongoDB自动杀执行时间的连接
  • 原文地址:https://www.cnblogs.com/qsyll0916/p/8541671.html
Copyright © 2011-2022 走看看