广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    条件编译的三种形式

    来源:网络收集  点击:  时间:2024-03-14
    【导读】:
    预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。工具/原料more一台已经配置好编译环境的电脑。一个很简单的文本编辑器,比如,windows自带的记事本第一种形式1/2分步阅读

    #ifdef 标识符 程序段1#else 程序段2#endif

    它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:

    #ifdef 标识符程序段

    #endif

    #define NUM

    okmain(){

    struct stu{

    int num;

    char *name;

    char sex;

    float score;

    } *ps;

    ps=(struct stu*)malloc(sizeof(struct stu));

    ps-num=102;

    ps-name=Zhang ping;

    ps-sex=M;

    ps-score=62.5;

    #ifdef NUM

    printf(Number=%d\nScore=%f\n,ps-num,ps-score);

    #elseprintf(Name=%s\nSex=%c\n,ps-name,ps-sex);

    #endif

    free(ps);

    }

    2/2

    由于在程序的第16行插入了条件编译预处理命令,因此要根据NUM是否被定义过来决定编译那一个printf语句。而在程序的第一行已对NUM作过宏定义,因此应对第一个printf语句作编译故运行结果是输出了学号和成绩。在程序的第一行宏定义中,定义NUM表示字符串OK,其实也可以为任何字符串,甚至不给出任何字符串,写为: #define NUM 也具有同样的意义。 只有取消程序的第一行才会去编译第二个printf语句。读者可上机试作。

    第二种形式1/2

    表达方式:

    #ifndef 标识符

    程序段1

    #else

    程序段2

    #endif

    2/2

    与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。

    第三种形式1/2

    #if 常量表达式程序段1#else程序段2#endif

    它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能

    #define R 1main(){

    float c,r,s;

    printf (input a number: );

    scanf(%f,c);

    #if R

    r=3.14159*c*c;

    printf(area of round is: %f\n,r);

    #else

    s=c*c;

    printf(area of square is: %f\n,s);

    #endif

    }

    2/2

    本例中采用了第三种形式的条件编译。在程序第一行宏定义中,定义R为1,因此在条件编译时,常量表达式的值为真,故计算并输出圆面积。上面介绍的条件编译当然也可以用条件语句来实现。但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段;

    2,生成的目标程序较短。如果条件选择的程序段很长, 采用条件编译的方法是十分必要的。

    注意事项

    预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的。程序员在程序中用预处理命令来调用这些功能。

    宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。在宏调用中将用该字符串代换宏名。

    宏定义可以带有参数,宏调用时是以实参代换形参。而不是“值传送”。

    为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。

    文件包含是预处理的一个重要功能,它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件。

    条件编译允许只编译源程序中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销并提高了程序的效率。

    编译
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_352078.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-07 04:09:17  耗时:0.026
    0.0257s