2010年10月9日 星期六

GCC (4.4.1)之C Preprocessor part III


Conditionals
CPPP的Conditionals和C中的if很像,不過C的if是在run-time決定是否要被執行,而CPP則是在compiler time就決定code是否被編譯。

Conditionals主要有三個指令#if、#ifdef和#ifndef。

#ifdef MACRO
#endif
當MACRO被定義這個block才會被編譯,而#ifndef剛好相反。


#if expression
#endif
當expression為非0這個block才會被編譯。而#if defined(MACRO)就等同於#ifdef MACRO,#if也有巢狀寫法。
#if X == 1
#elif X >= 10
#else
#endif
個人偏愛"#if"勝於"#ifdef",主要因為"#if"可以取代"#ifdef",而且"#if"還支援數學運算,如+,-*,/還有bitwise operations, shifts, comparisons, and logical operations (&& and ||)等等,不過僅限於整數型態的運算
#if (1<<2) > 5
#warning "(1<<2) > 5"
#else
#warning "!((1<<2) > 5)"
#endif


Diagnostics
CPP有兩個Diagnostics指令#error和#warning,差異在於一旦執行到#error就會終止處理。



沒有留言:

張貼留言

熱門文章