条件编译
标签: C语言
学习人数: 9.5k


高清播放
赞赏支持

预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。

条件编译有三种形式,下面分别介绍:

1. 第一种形式:

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

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

#ifdef 标识符  
    程序段  
#endif  

 

【例】

#include<stdio.h>  
#include<stdlib.h>  
#define NUM ok  
  
int 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);  
    return 0;  
}  

 

由于在程序的第 16 行插入了条件编译预处理命令,因此要根据 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),...

登录查看完整内容


课后作业

掌握本节内容


登录后开始许愿

暂无评论,来抢沙发