条件编译
预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。 这对于程序的移植和调试是很有用的。 条件编译有三种形式,下面分别介绍:
1. 第一种形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有, 即可以写为:
#ifdef 标识符
程序段 #endif
#define num ok
main(){
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);
#else
printf("name=%s\nsex=%c\n",ps->name,ps->sex);
#endif
free(ps);
}
由于在程序的第16行插入了条件编译预处理命令, 因此要根据num是否被定义过来决定编译那一个printf语句。而在程序的第一行已对num作过宏定义,因此应对第一个printf语句作编译故运行结果是输出了学号和成绩。在程序的第一行宏定义中,定义num表示字符串ok,其实也可以为任何字符串,甚至不给出任何字符串,写为: #define num 也具有同样的意义。 只有取消程序的第一行才会去编译第二个printf语句。读者可上机试作。