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就會終止處理。