- 8.4.3 #ifdef、#ifndef命令
- ifdef与#ifndef命令用于判断宏名是否被定义过,并根据判断的情况进行条件编译。#ifdef命令的一般形式如下。
- ifdef宏名
- else
- endif
- ifndef的一般形式如下。
- ifndef宏名
- else
- endif
- ifndef命令与#ifdef命令的操作恰好相反。其执行过程是,作为判断语句的#ifndef后面的宏名是标识符。若该标识符未被定义过,则编译标识符紧跟的语句段;如果标识符被定义过,则编译#else命令后面的语句段。
- include<stdio.h>//头文件
- define SCORE 85//宏定义
- ifdef SCORE//条件编译
- else
- endif
- ifndef GREED
- else
- endif
8.4.3 #ifdef、#ifndef命令
ifdef与#ifndef命令用于判断宏名是否被定义过,并根据判断的情况进行条件编译。#ifdef命令的一般形式如下。
ifdef宏名
语句段;
else
语句段;
endif
其执行过程是,作为判断语句的#ifdef后面的宏名是标识符。若该标识符被定义过,则编译标识符紧跟的语句段;如果标识符未被定义过,则编译#else命令后面的语句段。
ifndef的一般形式如下。
ifndef宏名
语句段;
else
语句段;
endif
ifndef命令与#ifdef命令的操作恰好相反。其执行过程是,作为判断语句的#ifndef后面的宏名是标识符。若该标识符未被定义过,则编译标识符紧跟的语句段;如果标识符被定义过,则编译#else命令后面的语句段。
使用#ifdef和#ifndef命令的程序示例如下。
include<stdio.h>//头文件
define SCORE 85//宏定义
void main()//主函数
{
ifdef SCORE//条件编译
printf(“SCORE is defined!\n”);//如果宏SCORE存在,则执行该语句
else
printf(“SCORE is not defined!\n”);//如果宏SCORE不存在,则执行该语句
endif
ifndef GREED
printf(“GREED is not defined!\n”);//如果宏GREED存在,则执行该语句
else
printf(“GREED is defined!\n”);//如果宏GREED不存在,则执行该语句
endif
}
该程序可以在KeilµVision3集成开发环境中运行,其结果如下所示。
SCORE is defined!
GREED is not defined!
在本例中,先定义了宏名SCORE,接着在主程序中通过#ifdef和#ifndef命令来判断宏名SCORE和GREED是否被定义过,并打印输出结果。
在C51语言中,使用#ifdef和#ifndef命令需要注意如下几点。
❑#ifdef与#ifndef可以与#else语句联合使用,但不能和#elif联合使用。
❑#ifdef与#ifndef支持嵌套。
❑#ifdef和#ifndef命令中的#else命名及其后面的语句段可以省略。这种情况下,只判断标识符是否定义过,若定义过,则编译#ifdef后的语句;若未定义过,则编译#ifndef后的语句。