2013-06-20 322 views
1

我正在使用Visual Studio 2005並在構建WinCE 6.0 OS Image中受過培訓。我在pin mux setup部分。我已經設置了一個宏BSP_HC1,所以只用該宏編碼應該可以工作。部分編碼爲Visual Studio - 編譯錯誤

#define GPMC_PADS \ 
#ifdef BSP_HC1 
    PAD_ENTRY(GPMC_A6 ,INPUT_DISABLED | MUXMODE(SAFE_MODE)) \ 
    PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0)) 
#else 
    PAD_ENTRY(GPMC_A1  ,INPUT_DISABLED | MUXMODE(0))  \ 
    PAD_ENTRY(GPMC_A2  ,INPUT_DISABLED | MUXMODE(0))  \ 
    PAD_ENTRY(GPMC_A3  ,INPUT_DISABLED | MUXMODE(0)) 
#endif 

智能感知正確地將else部分顯示爲非活動代碼。但是,當我選擇Build時,我的錯誤是「error: C2449 found '{' at file scope (missing function header?)」。

所以,我在#ifdef, #else and #endif的末尾添加了反斜槓。

#define GPMC_PADS \ 
#ifdef BSP_HC1 \ 
    PAD_ENTRY(GPMC_A6 ,INPUT_DISABLED | MUXMODE(SAFE_MODE)) \ 
    PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0)) \ 
#else \ 
    PAD_ENTRY(GPMC_A1  ,INPUT_DISABLED | MUXMODE(0))  \ 
    PAD_ENTRY(GPMC_A2  ,INPUT_DISABLED | MUXMODE(0))  \ 
    PAD_ENTRY(GPMC_A3  ,INPUT_DISABLED | MUXMODE(0))  \ 
#endif 

建築時沒有錯誤。但是,我想知道我是否做了正確的事情,我的編碼會達到預期的目的,因爲我盲目地完成了它。我認爲#ifdef和其他相關的預處理器指令不需要包含在宏定義GPMC_PADS中,編譯器會分開處理它。請解釋我,如果我錯了。

+0

你可能想看看預處理器的輸出,看看它做你的構造。 – alk

回答

3

您不能在#define中使用預處理器指令。

這樣來做:

#ifdef BSP_HC1 
#define GPMC_PADS \ 
    PAD_ENTRY(GPMC_A6 ,INPUT_DISABLED | MUXMODE(SAFE_MODE)) \ 
    PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0)) 
#else 
#define GPMC_PADS \ 
    PAD_ENTRY(GPMC_A1  ,INPUT_DISABLED | MUXMODE(0))  \ 
    PAD_ENTRY(GPMC_A2  ,INPUT_DISABLED | MUXMODE(0))  \ 
    PAD_ENTRY(GPMC_A3  ,INPUT_DISABLED | MUXMODE(0)) 
#endif 
+0

非常感謝。該文件已成功編譯。你能告訴我,我們還有什麼不應該使用預處理器指令? – Gomu

+0

@Gomu:#define中的'#define'也不起作用。 – alk

+0

謝謝。關於交換機「案例」中的#ifdef呢? – Gomu