#if

2017-07-27  本文已影响0人  黄卡卡

#if

#if和#endif是一组同时使用的,叫做条件编译指令。#if与#define、#include等指令一样是由预处理器这个强大的工具处理的,预处理器可以在编译前处理c程序。
使用条件编译指令,如果满足#if后面的条件,就编译#if和#endif之间的程序段,否则不编译。
例如

#define LEN_MAX 3
#define LenMax 6
#if LEN_MAX <LenMax
#undef LEN_MAX
#define LEN_MAX LenMax
#endif

定义了LEN_MAX 和LenMax,如果LEN_MAX <LenMax成立为真,则取消LEN_MAX的定义,重新定义LEN_MAX,也就是说LEN_MAX等于6。这时预处理器会保留中间程序(#if与#endif行会消失),让编译器编译中间行。
如果LEN_MAX <LenMax不成立,预处理器会将删除#if到#endif中的程序(包括#if与#endif行),则编译器会看不到中间的程序。
这样的处理不会在目标代码中占用空间,减少程序运行时间。它可以用于程序调试使用。

#if vs. if

条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,
条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif
它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如

#define  A 0  //把A定义为0

#if (A > 1)

         printf("A > 1");  //编译器没有编译该语句,该语句不生成汇编代码

#elif (A == 1)

         printf("A == 1"); //编译器没有编译该语句,该语句不生成汇编代码

#else

         printf("A < 1");   //编译器编译了这段代码,且生成了汇编代码,执行该语句

#endif

而 if 语句则不然,if 是 C 语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的, 如

#define A 0

if (A > 1)

     printf("A > 1");   //编译器编译该语句,但因为A == 0 未执行

else if(A == 1)

   printf("A == 1");  //编译器编译该语句,但因为A == 0 未执行

else

   printf("A < 1");  //编译器编译该语句,因为A == 0 故执行

#if作为一个编译“开关”,比如:

#if(条件满足)
执行代码1
#else
执行代码2
#endif

条件编译是根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的;
条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。

上一篇下一篇

猜你喜欢

热点阅读