C++ #if 0 ... #endif 的用法

#if 0 與 #endif 的用法

  • 語法 :
    #if 0     // 參數為 0 時不編譯區塊內的程式碼 ;參數為 1 時編譯區塊內的程式碼
    /…程式碼區塊…/
    #endif
  • 使用時機一:快速註解、測試功能
int TestFunction(int x){return x;}
int main(){
#if 1  //類似開關的概念,if右方的參數可設定 0 & 1,若設定 1則編譯 #if到 #endif之間的程式碼,設定 0則不編譯
	std::cout << TestFunction(100);
#endif
return 0;
}

  • 使用時機二:嵌套註解 (巢狀註解)
    有時候再註解區塊內,還需要要有額外的註解區域,這時就可以搭配 #if #endif使用巢狀註解
/*	//當將外層註解拿掉需要使用內部程式碼時,又希望部分的程式碼需要註解,這時就可以搭配著使用
int a;
#if 0	//若需要用時再將參數設為 1打開即可使用
	int b;
	fun1();
#endif
fun2();
*/
}

為什麼要這樣搭配使用,不直接都用 /* 註解就好呢?   因為…

/*			//註解頭 A,註解頭會尋找最近的註解尾,所以會找尋最近的註解尾 B
int a;
/*			//註解頭 B,此時因為原本成對的註解尾 B被註解頭 A給使用走了,這時註解頭 B只是註解內部的程式碼之一而已
	int b;
	fun1();
*/			//註解尾 B,被註解頭 A拿去配對,註解區塊到這邊結束
fun2();		//無法被註解
*/			//註解尾 A,被遺忘的註解尾 A,程式無法執行此行並出現 ERROR
}

除了擁有類似註解的功能之外,因為 #if 是預處理的指令,所以當我們我們將參數設為0時(#if 0),程式在一開始預處理階段(編譯之前)的時候便會把這程式碼給清掉,也就是說可以縮短待會要編譯的程式碼長度,當編譯器編譯相對精簡的程式碼時,便可達到提升效率、省時的效果。

你可能感兴趣的:(c++)