天天看點

c++--------------條件編譯的問題

#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

還可以注釋掉大段的代碼

不能注釋掉本身包含*/的代碼(不能嵌套)

c++

繼續閱讀