一般情况下,源程序中所有的语句都参加编译,但有时也希望根据特定的条件去编译源文件的某些部分,即对某些满足条件要求的源代码进行编译,这就是“条件编译”。条件编译对于程序的调试和移植有着重要作用,C语言中提供了#if…#endif、#ifdef…#endif和#ifndef…#endif三种条件编译命令供我们使用,下面分别介绍三种命令的使用方法。
1.#if…#endif命令
命令一般格式如下:
其功能是:如表达式的值为“真”(非零),则编译程序段1,否则编译程序段2。
【例9-7】条件编译实例一。
如果将宏定义中SEX的值改为0,则输出为“女性”。需要注意的是,由于条件编译属于预处理的功能,因此#if后边用到的表达式只能是用宏定义的标识符或表达式而不能是普通的变量,不要和普通的if语句混淆。
2.#ifdef…#endif命令
命令一般格式如下:
其功能是:若指定标识符已经被定义,则编译程序段1,否则编译程序段2。
如果没有程序段2,则可以不写#else,命令格式为:
【例9-8】条件编译实例二。
若删除第二行的DEBUG定义,则程序输出“标识符没定义!”
这是一个在调试程序时比较实用的小技巧。调试程序过程中有时候需要输出某些中间变量的值帮助我们判断程序的执行情况,但是在程序调试结束后还要删除那些多余的输出语句,显然比较麻烦。此时可以使用例9-8中的方法来输出中间变量的值,在程序调试结束后,删除第二行中DEBUG的定义,则这些多余的输出语句不会编译到目标程序中。
3.#ifndef…#endif命令
命令一般格式如下:
功能:若指定标识符未被定义,则编译程序段1,否则编译程序段2。
命令2和命令3两种方法指定的编译条件相反,用法类似,可根据需要任选一种。
三种条件编译命令完成的功能当然可以使用分支语句来完成,但是使用分支语句时是对整个源程序进行编译,生成的目标代码比较长。而使用条件编译时,可以根据指定的条件编译程序中的某一个部分,使得同一个源程序能够在不同的编译条件下产生不同的目标代码。这种机制更加有利于程序的通用性。
综合实训
1.输入两个整数并求出其中的较大者,要求程序有两个文件组成,file1.c中保存求最大值的函数,file2.c中保存main函数,并使用文件包含功能使该程序能够运行。
2.输入三角形的三条边,利用海伦公式求出三角形的面积,要求使用带参数的宏定义海伦公式。
课后习题(www.xing528.com)
一、单项选择题
1.有表达式x=TWO*5,则对于以下宏定义其替代形式分别为( )。
①#define ONE 10
#define TWO ONE+ONE
②#define ONE 10
#define TWO(ONE+ONE)
2.在“文件包含”预处理命令中,当#include后面的文件名用“”括起来时,寻找被包含文件的方式是( )。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在目录搜索,再按系统设定的标准方式搜索
C.仅仅搜索源程序所在目录
D.仅仅搜索当前目录
二、读程序写结果
1.以下程序的运行结果是________。
2.分析下面程序运行结果________。
3.分析下面程序运行结果_________。
4.分析下面程序运行结果_________。
5.分析下面程序运行结果_________。
三、编程题
1.定义一个参数的宏,使两个参数互换,并写出程序,输入两个数作为使用宏时的实参,输出已交换后的值。
2.建立一个文件max.h,写一个函数max(int a,int b),求两个数的最大值。
3.建立一个main.cpp文件,调用max.h文件,并输入两个数,输出其最大值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。