#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
条件编译是根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的;
条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。
网友评论