#ifdef 标识符
程序段 1
#else
程序段 2
#endif
它的功能是,如果标识符已被 #define 命令定义过则对程序段 1 进行编译;否则对
程序段 2 进行编译。如果没有程序段 2(它为空),本格式中的#else 可以没有,即可以写
为:
#ifdef 标识符
程序段
#endif
【例 9.12】
#define NUM ok
main(){
struct stu
{
int num;
char *ncom;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps->num=102;
ps->ncom="Zhang ping";
ps->sex='M';
ps->score=62.5;
#ifdef NUM
printf("Number=%d\nScore=%f\n",ps->num,ps->score);
#else
printf("Ncom=%s\nSex=%c\n",ps->ncom,ps->sex);
#endif
free(ps);
}
由于在程序的第 16 行chā入了条件编译预处理命令,因此要根据 NUM 是否被定义过来决定
编译那一个 printf 语句。而在程序的第一行已对 NUM 作过宏定义,因此应对第一个 printf
语句作编译故运行结果是输出了学号和成绩。
在程序的第一行宏定义中,定义 NUM 表示字符串 OK,其实也可以为任何字符串,甚至不
给出任何字符串,写为:
#define NUM
也具有同样的意义。只有取消程序的第一行才会去编译第二个 printf 语句。读者可上机试作。
2. 第二种形式:
#ifndef 标识符
程序段 1
#else
程序段 2
#endif
与第一种形式的区别是将 “ifdef” 改为“ifndef” 。它的功能是,如果标识符未被
#define 命令定义过则对程序段 1 进行编译,否则对程序段 2 进行编译。这与第一种形式的
功能正相反。
3. 第三种形式:
#if 常量表达式
程序段 1
#else
程序段 2
#endif
它的功能是,如常量表达式的值为真(非 0),则对程序段 1 进行编译,否则对程序段 2
进行编译。因此可以使程序在不同条件下,完成不同的功能。
【例 9.13】
#define R 1
main(){
float c,r,s;
printf ("input a number: ");