C语言—预处理器2:条件编译(#if、#else、#elif和#endif)

本文详细介绍了C语言中的预处理器条件编译,包括#if、#else、#elif和#endif的用法。通过示例解释了如何根据常量表达式的值决定代码块是否编译,以及在编译时选择不同代码段的机制。

 在编译一个程序时,可以条件编译来实现代码在某种条件下编译或忽略,这样会程序的维护性修改。
 使用条件编译,可以选择代码的一部分是被正常编译还是完全忽略。支持条件编译的语句是 #if 指令和与其匹配的 #endif 指令。语法形式如下:

#if constant-expression
	statements
#endif

 预编译器会对constant-expression(常量表达式)进行求值,如果它为 1(真),那么statements就会被正常编译,否则statements不会被编译。
所谓constant-expression(常量表达式)就是它的值,或者由 #define 定义的符号。如果变量在执行期之前无法获得他们的值,那么该变量出现在常量表达式中就是非法的,因为它们的值是无法预测的。

#define DEBUG 1
#if DEBUG
printf("x=%d,y=%d\n", x, y);
#endif
int main()
{
	int x = 0, y = 1;
	getchar();
	return 0;
}

编译时会报错,将代码改为

#define DEBUG 1
int main()
{
	int x = 0, y = 1;
#if DEBUG
	printf("x=%d,y=%d\n", x, y);
#endif
	getchar();
	return 0;
}

编译成功,运行结果

x=0,y=1

 条件编译的另外一个用途就是在编译时选择不同的代码部分。为此 #if 指令还具有可选的 #else 和 #elif 子句。语法形式如下:

#if constant-expression
	statements_1
#elif constant-expression	
	statements_2	
#else
	statements_3
#endif

 #elif 子句出现的次数可以不限。每一个constant-expression(常量表达式)只有当前面所有的常量表达式的值都为假时才会被编译。#else 子句中的语句只有当前面所有的常量表达式的值都为假时才会被编译,其他情况都会被忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值