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