1 #if
(1)基本格式
#if 表达式 ... #endif
表达式为真:保留代码
表达式为假:不保留代码
#if后的“表达式”有两种:
第一种:为整形常量,或者整形常量表达式
第二种:为由defined、!defined组建表达式
1)第一种:表达式为整形常量
(a)格式
#if 整形常量,或者整形常量表达式 ... #endif
表达式为真:保留代码
表达式为假:去掉代码
(b)例子
#if 1 //1为真(非零为真),保留代码 ... #endif
当然也可以定义成宏
#define NUM 0 #if NUM ... #endif #define NUM 0 #if NUM == 1 // 写> < >= <=这些符号都是成立的 ... #endif
可不可以把宏体去掉,#define NUM 0变为#define NUM。
答:不行。
2)第二种:表达式由defined、!defined组建
(a)#if defined
· 基本功能
- 与#ifdef是一样的,这个时候是通过判断宏存不存在来判定真假。
- 例子
#define MACRO
#if defined MACRO //如果定义了这个宏(宏存在),就保留代码
printf("1111111\n");
#endif· 与#ifdef不同之处
- #ifdef是独立的关键字,但是#if defined是两个两个关键字的组合
- #if defined可以实现宏的“&&、||”运算,但是#ifdef不行
#define MACRO1
#define MACRO2
#if defined MACRO1 && defined MACRO2 //如果这两个宏都定义了的话,才保留代码
printf("1111111\n");
#endif(b)#if !defined
!和defined是两个独立的关键字。
· 功能与#if defined刚好相反,
宏不存在:为真
宏存在:为假
· 例子1
#define MACRO
#if !defined MACRO //如果没有定义这个宏(宏不存在),就保留代码
printf("1111111\n");
#endif· 例子2
#define MACRO1
#define MACRO2
//只有当这两个宏都没有定义时,才保留代码
#if !defined MACRO1 && !defined MACRO2
printf("1111111\n");
#endif· defined和!defined也可以混用
#define MACRO1
#define MACRO2
#if (defined MACRO1 && defined MACRO2) || !defined MACRO3
printf("1111111\n");
#endif可以按照你自己的要求随意的组合。
(2)与#else 搭配
直接举例讲解。
1)例子1:
#define NUM 0
#if NUM //0为假,不保留代码
printf("1111111\n");
#else
printf("2222222\n");
#endif2)例子2
#define MACRO1
#define MACRO2
#if !defined MACRO1 && defined MACRO2
printf("1111111\n");
#else //如果前面的条件不成立,就保留#else后面的代码
printf("2222222\n");
#endif(3)与#elif 搭配
直接举例演示。
1)例子1
#if 1
printf("1111111\n");
#elif 1
printf("2222222\n");
#endif2)例子2
#if !defined MACRO
printf("1111111\n");
#elif defined MACRO1
printf("2222222\n");
#endif3)例子3
#if 0 //#if !defined MACRO
printf("1111111\n");
#elif NUM == 100
printf("2222222\n");
#elif !definedMACRO1 || defined MACRO2
printf("3333333\n");
#else //#else可以没有
printf("4444444\n");
#endif#if、#elif、#else、!、defined这些关键字怎么组合使用,完全取决于你自己的想要怎么用。