工具与软件:
您好!
我想使用宏检查枚举边界、而 CCS 提升了#188-D 警告。
下面是对我的问题的简化:
由于枚举可以是有符号的或无符号的(在 C23中、我们可以修复此问题、但我认为 CCS 仅支持 C11)、因此我不明白为什么会生成此警告。
这是编译器错误吗? 是否有办法让编译器快乐?
此致、
Gabriel
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我想使用宏检查枚举边界、而 CCS 提升了#188-D 警告。
下面是对我的问题的简化:
由于枚举可以是有符号的或无符号的(在 C23中、我们可以修复此问题、但我认为 CCS 仅支持 C11)、因此我不明白为什么会生成此警告。
这是编译器错误吗? 是否有办法让编译器快乐?
此致、
Gabriel
警告诊断正确。 请搜索 TI ARM 编译器手册 中标题为 枚举类型大小的子章节。 您将了解到基础的整数类型 MyEnum_t 正弦值 unsigned char . 宏 以内 构成此比较: my_value >= my_enum_a . 下面是与的比较 unsigned char 变量>= 0。 每个 unsigned char 始终大于或等于0。 因此、编译器会优化这种比较。 不执行。
至于如何修复、这取决于您 对此代码的意图。 也许抑制诊断是有道理的。 要了解如何执行该操作、请在同一手册中搜索标题为" 了解诊断消息"的子章节。
谢谢。此致、
-George.
感谢 George Mock 和 Keith Barkley 的回答。
我知道这不是一种不必要的行为;即使我觉得它不直观。
因此、我将结束该问题。
对于发现该问题的人、我更喜欢的解决方案是细分问题 >=
>
||
==.
通过这样做, 编译器没有意识到当 MIN
是时,组合总是正确的 0
。
#define IS_WITHIN(number_, min_, max_) (((number_) > (min_) || (number_) == (min_)) && (number_) <= (max_))
此致、
Gabriel