在過去都沒有去理會#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,然後重新編譯就行了。當然一般宏定義是放在一個特定的文件(這裏爲了簡單就寫在一起),這樣外面的人只需要更改那個文件所對應的值就行對系統進行裁剪而不需要關心具體代碼,就行實現裁剪。
轉自http://blog.csdn.net/raining_heart/article/details/8019535