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"); #endif
2)例子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"); #endif
2)例子2
#if !defined MACRO printf("1111111\n"); #elif defined MACRO1 printf("2222222\n"); #endif
3)例子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这些关键字怎么组合使用,完全取决于你自己的想要怎么用。