C语言#ifdef和#ifndef条件编译的用法(附带实例)
在 #if 条件编译命令中,需要判断符号常量所定义的具体值。但有时并不需要判断具体值,只需要知道这个符号常量是否被定义了,这时可以采用另一种条件编译的方法,即 #ifdef 与 #ifndef 命令,分别表示“如果有定义”及“如果无定义”。
#ifdef 的一般形式如下:
#ifdef 可与 #else 连用,形式如下:
#ifndef 的用法恰好和 #ifdef 相反,并且它也可以和 #else 连用。
【实例】模拟银行叫号服务。去银行办理业务时,需要先取号,如号码为 100 号,则需等到叫 100 号时才可以办理业务;如果没有取号,则不能办理业务。使用 #ifdef 和 #ifndef 编写程序,模拟此场景。
#ifdef 的一般形式如下:
#ifdef 宏替换名 语句段 #endif含义是:如果宏替换名已被定义过,则对语句段进行编译;如果未定义 #ifdef 后面的宏替换名,则不对语句段进行编译。
#ifdef 可与 #else 连用,形式如下:
#ifdef 宏替换名 语句段 1 #else 语句段 2 #endif含义是:如果宏替换名已被定义过,则对语句段 1 进行编译;如果未定义 #ifdef 后面的宏替换名,则对语句段 2 进行编译。
#ifndef 的用法恰好和 #ifdef 相反,并且它也可以和 #else 连用。
【实例】模拟银行叫号服务。去银行办理业务时,需要先取号,如号码为 100 号,则需等到叫 100 号时才可以办理业务;如果没有取号,则不能办理业务。使用 #ifdef 和 #ifndef 编写程序,模拟此场景。
#include<stdio.h> #define STR "100 号" /*定义宏常量*/ int main() { #ifdef STR printf(STR); /*输出叫号信息*/ printf("能办理业务\n"); #endif printf("\n"); #ifndef ABC printf("没取号码,表示没被定义"); #endif printf("没取到号不能办理业务\n"); return 0; }程序运行结果为:
100 号能办理业务
没取号码,表示没被定义没取到号不能办理业务