基础用法:
#ifdef Something//还有#ifndef
//即使下面包含的是带#的预处理指令,也会受ifdef的影响(有/无效)
...
#elif defined(Something2)
...
#else//else和elif下面不用再写#define
...
#endif//就是看指定的标识是否存在,若存在则ifdef包含的代码块有效,否则反之
1 防止头文件重复包含
#ifndef _HEADER_H_//要全大写
#define _HEADER_H_//通常ifndef都和define配合使用,防止后面再判断到相同的ifdef不通过
...
#endif
2 自由指定某段代码是否编译(有效)
#define Something//define后可啥也不加,只表示此表示存在
#ifdef Something//若前面define了这个标识,则下面的内容有效
#define Something//此处也要写标识
...
#endif
3 #if等的使用
1 #if defined(Something)//#ifdef=#if defined(...);#ifndef=#if !defined(...)
...
#endif
2 #if Macro1==100//表达式中只能用宏,不能用变量(尚不确定)
...
#endif
3 #ifdef Sth1
#undef Sth2//取消某宏的定义
4 妙用
//In HeaderFile1
#define Sth
#define UseSth 1
//In File2
#include"HeaderFile1"
#ifdef Sth
#if UseSth
...
#endif//想查询在某个文件中是否有标识符Sth,include该文件并用ifdef来判断
//define多行
#define MAIN int main()\//在每一行末尾加上反斜杠即可
{\
}
5 版本控制
在项目设置中添加macro,就不用在代码中写#define了
也可以更改不同的配置,使不同配置下预先定义的macro不同(如debug和release)

#if MyMacro==1//假设在debug配置下设置了MyMacro,则此处if满足条件
...
#else MyMacro==0//release中无MyMacro,无效
...
#endif
本文介绍了C++中ifdef的多种用途,包括防止头文件重复包含、自由选择编译代码段、使用#if等预处理指令,以及在项目版本控制中的应用。通过设置宏定义,可以在debug和release等不同配置下灵活控制代码行为。
1万+

被折叠的 条评论
为什么被折叠?



