• C/C++ 条件编译


    条件编译就是指有条件的编译,即根据条件去编译代码,在编译阶段时就对代码做出取舍,有的编译,有的不编译,这样比写成一个个判断函数更有效率,比如工程代码大部分的地方都类似,只有个别语句因为使用的硬件版本不同,就可以使用条件编译增加可移植性。

    条件编译的“条件”,可以是一个表达式的值,也可以是一个定义的宏。

    对于前者,如果该表达式为真,则编译下面的代码,为假则不编译。对于后者,如果定义了该宏,则编译下面的代码,未定义则不编译。

    后者的情况,最常见的就是头文件使用的防止重复定义的写法。

    #ifndef _ABCD_H_
    #define _ABCD_H_
    
    /*
    
    ......
    
    */
    
    #endif

    首先,如果没有定义_ABCD_H_,就定义这个宏,然后跟一段代码,以“endif”结束。此“endif”对应的是开头“ifndef”的“if”,把中间的所有代码包裹起来。

    那么,编译时把所有文件包含起来,第一次编译到此处时,会定义_ABCD_H_并编译下面的代码。往下继续编译时,倘若有其它文件引用了这个头文件,会再次遇到这一段代码,然后发现_ADCD_H_已经被定义,所以“ifndef _ADCD_H_”后面的代码都不会编译,这样就防止了头文件的重复定义。

    通用条件编译指令:

    • #if:如果条件为真,则执行相应操作
    • #elif:如果前面条件为假,而该条件为真,则执行相应操作
    • #else:如果前面条件均为假,则执行相应操作
    • #endif:结束相应的条件编译指令
    • #ifdef:如果该宏已定义,则执行相应操作
    • #ifndef:如果该宏没有定义,则执行相应操作

    另外,想要取消宏的定义,可以用“#undef”加宏名来取消宏定义。

    练习

    定义三个汇率,第一个是人民币对美元,第二个是人民币对欧元,第三个是人民币是日元。

    用户输入人民币数量,输出能换多少对应币种。

    使用宏去控制程序换算哪种货币。

    extra.h

    #ifndef _EXTRA_H_
    #define _EXTRA_H_
    #include<iostream>
    
    #define USD_PER_CNY             (0.1422)
    #define EUR_PER_CNY             (0.1278)
    #define JPY_PER_CNY             (15.4651)
    
    #define EXCHANGE_USD             0
    #define EXCHANGE_EUR             1
    #define EXCHANGE_JPY             2
    
    #define CURRENT_EXCHANGE         EXCHANGE_JPY
    
    #endif // _EXTRA_H_

    main.cpp

    #include "extra.h"
    
    void cal_exchange()
    {
        double mon_i;
        double mon_o;
    
        std::cout<<"How much money(yuan): ";
    
        while(std::cin>>mon_i)
        {
            #if CURRENT_EXCHANGE == EXCHANGE_USD
                mon_o = mon_i*USD_PER_CNY;
            #elif CURRENT_EXCHANGE == EXCHANGE_EUR
                mon_o = mon_i*EUR_PER_CNY;
            #else
                mon_o = mon_i*JPY_PER_CNY;
            #endif // CURRENT_EXCHANGE
    
            std::cout<<"Money exchanged: "<<mon_o<<"
    ";
            std::cout<<"How much money(yuan): ";
        }
    
    }
    
    int main()
    {
        cal_exchange();
    }

    头文件里控制的宏是“CURRENT_EXCHANGE”,条件编译使用表达式,根据它的值是多少来编译哪段代码,值由其它宏来决定。现在定义的是日元汇率,所以结果如下。

  • 相关阅读:
    绿茶一杯辨蜂蜜
    将Windows桌面扩展到第二个显示器/投影机上
    各种茶的特点和挑选(未完)
    转载一位操盘手的惊人语录 
    大家看看这个资料,有助于你了解股市
    庄家的故事之000503海虹控股
    股本变迁,分红扩股数据调查
    onchange 和 onkeyup,onpropertychange 用法小记
    对范美忠事件的评论
    一位天涯的朋友在星期一晚上发来的留言
  • 原文地址:https://www.cnblogs.com/banmei-brandy/p/11797443.html
Copyright © 2020-2023  润新知