目录
1. 条件编译概念介绍
预处理程序提供了条件编译的功能。条件编译的目的就只编译源文件中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销。条件编译的基本格式如下。
#if A
{
//检查宏A是否被定义。如果定义了,则执行此处代码块。
}
#elif B
{
//如果宏A未被定义,则检查宏B是否被定义,如果B被定义,则执行此处代码块。
}
#else
{
//如果A和B都未被定义,则执行此处代码块。
}
#endif
2. 条件编译应用场景
2.1 代码块的暂时屏蔽
既然要进行代码块的屏蔽,为什么不用/**/而要使用条件编译#if 0呢,是因为有些代码块我们只是暂时不用,而并非永久不用,其次/**/的标准用法是用来注释而并非屏蔽代码,因此可以通过条件编译来快速地修改条件从而达成代码块的屏蔽作用,下面用例就暂时屏蔽了代码块2。
void text_code(void)
{
//代码块1
....
#if 0
//代码块2
....
#endif
}
2.2 区分调试版本和发行版本
我们在编译文件时需要区分debug版本和release版本,debug版本是调试版本,也就是我们平时测试时的程序版本,而release版本是发行版本,是我们对外发行的版本。
有些代码只需要在调试版本中出现,因此需要用条件编译来区分。比如下面这段代码,代码块1只在debug版本中出现,而代码块2在debug和release版本中都可以出现。
void text_code(void)
{
#if DEBUG
//代码块1
....
#endif
//代码块2
....
}
2.3 防止头文件重复包含
头文件中使用条件编译的目的是防止多个文件在调用头文件的时重复包含从而使编译失败。
//如果该头文件未被包含,就执行头文件的内容,已包含则直接跳过该头文件
#ifndef __ TEST_H__
//定义头文件相关的宏
#define __ TEST_H__
//执行头文件中的内容
...
#endif