#include<iostream>
using namespace std;
void main()
{
int a=10;
#if (a>1)
cout<<"a>1"<<endl;
#else
cout<<"a<=1"<<endl;
#endif
}
為什麼編譯運作後是a<=1
按道理應該是執行a>1的才對啊 #if在這裡是預處理指令
#if語句要判斷是宏的值,宏的值隻有通過#define或者在指令行-DXXX的形式定義。
用int a=10;形式定義了一個整型常量,而不是一個宏。
對于宏的替換,是在預編譯階段就進行的,會把所有的宏替換為實際的值。而對int a=10;的解析,卻是在編譯階段。
在預編譯階段,隻認#define定義的宏,不會理會int a=10;定義出來的常量,是以#if永遠為假。 條件編譯個作用是什麼? #ifdef 辨別符
程式段1
#else
程式段2
#endif 作用一:編譯生成的可執行代碼或者隻包含程式段1 或者隻包含程式段2 ,可執行程式大小會變小;
作用二:可以靈活的通過宏定義辨別符實作同一函數的不同版本,例如
#ifdef 辨別符
func1(...) {...}
#else
func1(...) {...}
#endif
這樣func1函數通過宏定義可以有不同的實作 #if 0
...
#endif
還可以注釋掉大段的代碼
不能注釋掉本身包含*/的代碼(不能嵌套)