1

我正在使用Visual Studio 2005并接受构建WinCE 6.0OS Image 的培训。我在引脚多路复用器设置部分。我已经设置了一个宏BSP_HC1,因此单独使用该宏进行编码应该可以工作。编码的一部分是,

#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

IntelliSense 正确地将 else 部分显示为非活动代码。但是,当我选择构建时,我收到错误为“ 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,编译器会单独处理它。如果我错了,请解释我。

4

1 回答 1

3

您不能在#defines 中使用预处理器指令。

这样做:

#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
于 2013-06-20T09:58:42.510 回答