【#if 0 ... #endif】真实用途

转自:http://blog.csdn.net/raining_heart/article/details/8019535

在过去都没有去理会#if 的作用,今天突发奇想,开启编译器试一试。

很多人都知道,#if  0  ...   #endfif的作用跟/*...*/的作用是一样的,就是注释,可是注释为什么不用注释符号/*就行了么?google了一下,大家都说是为了解决嵌套注释。如:

/*--------------------------------------------------------------------*/

#include“stdio.h”

int main()

{

            int  a=11;

/*这是一个外层注释

        /*

            int *b=&a;                     //这是一个内层代码注释

            *b = 10;

       */

             a++;

*/

}

/*----------------------------------------------------------------------*/

上面的程序编译后发现缺少了一个注释符号,因为注释符头 " / *  "是根据最近结束符 " */  "来判断注释的区域的,但是一但内嵌了就会发现错误。所以人们就使用了#if 0,如下:

/*--------------------------------------------------------------------*/

#include“stdio.h”

int main()

{

             int  a=11;

/*这是一个外层注释

#if  0   

             int *b=&a;                     //这是一个内层代码注释

             *b = 10;

#endif

              a++;

*/

}

/*----------------------------------------------------------------------*/

但是,#if就只有这个作用吗?有些书籍呼吁人们尽量少用它,那不是没有什么意义了?

其实不是的,在有些地方很常见到它,而且少不了它。当你见识过系统级的源代码就焕然大悟了。对,就是用于系统裁剪。

系统裁剪是针对系统的用途,对系统的源代码进行一下优化,减少不必要的功能。

#if是一个最经典的例子。如:

/*--------------------------------------------------------------------*/

#include“stdio.h”

#define TEST_2    1

int main()

{

            int  a=11;

/*这是一个外层注释

#if  TEST_2 

             int *b=&a;                    

             *b = 10;

#endif

              a++;

*/

}

/*----------------------------------------------------------------------*/

如上面的例子,对于某些功能不需要,我们只需对于的功能TEST_2的宏定义改成0,然后重新编译就行了。当然一般宏定义是放在一个特定的文件(这里为了简单就写在一起),这样外面的人只需要更改那个文件所对应的值就行对系统进行裁剪而不需要关心具体代码,就行实现裁剪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值