我正在尝试将代码移植到使用Microchip的C18编译器进行编译,以用于PIC单片机。该代码包括分配了大值的枚举(> 8位)。它们无法正常工作,表示例如0x02与0x2002相同。
如何强制枚举值作为16位值引用?
答案 0 :(得分:1)
在DirectX标头中,每个枚举都有一个FORCE_DWORD
值,其值为0xffffffff
。我想这基本上就是你想要的,它迫使编译器让枚举至少 32位。因此,请尝试添加FORCE_WORD
,其值为0xffff
。
当然,如果该编译器不支持大于8位的枚举,这不会解决您的问题。
答案 1 :(得分:1)
我发现了问题。
为了将来参考,C18编译器在执行数学运算时不会提升变量OR常量,即使它是ANSI C标准。这是为了在8位处理器上运行时提高速度。
要强制ANSI合规性,请使用“-Oi”编译器选项。