2013-06-20 74 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