0
我想基於邊界C++ #elif指令被丟棄
template<class B>
struct IntDecl {
enum {
L = B::_l, U = B::_u
};
#if (L >=0 && U <=255)
typedef char Type;
#elif (L>=0&&U<=65535)
typedef unsigned int Type;
#endif
};
所以創建一個類型聲明,因爲你在這裏看到的取決於L
和U
的類型將被定義的值。 例如
IntDecl< BOUND < 0, 65535 > >::Type i; // this should be a unsigned int
IntDecl< BOUND < 0, 255 > >::Type i1; // this should be a char
的問題是,無論是(i
和i1
)被認爲chars
,在#elif
被丟棄換句話說。任何幫助?爲什麼#elif
沒有執行?
你誤會了。預處理器在編譯器之前運行,只是進行文本替換。 – chris 2013-05-13 23:45:29
最好不要使用以下劃線開頭的名稱;它們基本上被保留用於'執行'。如果U大於65535(如果使用C預處理器的構造完全可以工作),則最終會出現問題。你應該有一個'#else'子句,以便覆蓋其他情況(並且它可能包含一個'#error'指令,以防止代碼編譯的信息比根本沒有定義'Type'的信息更好) 。 – 2013-05-14 00:10:14
@JonathanLeffler是的,我同意,但基本不工作 – 2013-05-14 01:49:54