[自用C语言篇]预处理——条件编译

条件编译

在部分情况下,希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。
可以使用相关指令告诉编译器根据条件执行或忽略相关代码块

#ifdef、#else和#endif

功能

#ifdef表示,如果预处理器已定义了指出的标识符,则执行#else或#endif指令之前的所有指令并编译所有C代码(比如先出现#else,则只执行到#else上一条代码)。如果预处理器未定义指出的标识符,且有#else指令,则执行#else和#endif指令之间的代码。
#ifdef、#else在一定程度上类似于if else。但必须注意的是
#else是根据需要来添加,但#endif是必须存在的。

一般格式

#ifdef 标识符
…code1…
#else
…code2…
#endif

参考代码

#ifdef NUM
	//如果已经使用#define定义了NUM,则执行下列代码,到#else之前
	#define NUM2 2
#else
	//如果没有使用#define定义NUM,则执行下列代码
	#define NUM 1
#endif

扩展

#ifdef也可用 #if defined()来实现相关功能

if define()的一般格式

#if defined(标识符)
…code…
#endif

如果前面定义过这个宏,就将code编译进去。

#ifndef

用法与#ifdef相同。
可以和#else一起使用,#endif必须存在。但跟#ifdef逻辑相反,#ifndef指令判断后面的标识符是否是未定义的。
常用于定义之前未定义的常量。当一个工程里面包含多个头文件时,使用#ifndef可以防止相同的宏被重复定义

扩展

#ifndef可用#if !defined()来实现相关功能

if !define()的一般格式格式

#if !defined(标识符)
…code…
#endif

如果前面没有定义过这个宏,就将code编译进去。

#if、#elif和#else

#if在一定程度上类似于if。

一般格式和功能

#if 条件1
…code1…
#elif 条件2
…code2…
#else
…code3…
#endif

1. 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去
2. 如果条件1不成立、条件2成立,那么编译器就会把#elif 与 #else之间的code2代码编译进去
3. 如果条件1、2都不成立,那么编译器就会把#else 与 #endif之间的code3编译进去
4. #if 和 #elif后面的条件一般是判断宏定义而不是判断变量。(条件编译是在编译之前做的判断,宏定义也是编译之前定义的)

5. #endif不可少

参考代码


 #include <stdio.h> 
 
 #define NUM 1
 
 int main () 
 { 
 	#if NUM == 0  
	printf("NUM = 0"); 
	#elif NUM > 0 
	printf("NUM > 0"); 
 	#else 
 	printf("NUM < 0"); 
 	#endif 
 	return 0; 
} 

输出结果为:
NUM > 0

程序分析:
首先定义了一个宏NUM,由于NUM为1,所以#elif的条件成立,printf(“NUM > 0”); 这条代码将会被编译进去,其实编译预处理后的代码为:

 #include <stdio.h> 
//stdio.h文件中的内容实际会代替#include <stdio.h>的位置 
 
int main ()  
{  
	printf("NUM > 0");   
	return 0; 
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值