【问题标题】:c Warning[Pe188]: enumerated type mixed with another typec 警告[Pe188]:枚举类型与其他类型混合
【发布时间】:2017-05-29 06:14:19
【问题描述】:

我收到了警告:

警告[Pe188]:枚举类型与其他类型混合

在:

ErrorFlag = (CurrentTime - TimerX > TIMEOUT_X);

但是如果我将其替换为:

if(CurrentTime - TimerX > TIMEOUT_X)
{
  ErrorFlag = TRUE;
}

第一种设置ErrorFlag的方法有什么问题?

编辑

我有一个本地的enum

typedef enum{
   FALSE = 0;
   TRUE= 1;
}BOOL;

ErrorFlag 的类型为BOOL

【问题讨论】:

  • 不要使用一些自制的布尔值!分别使用标准_Boolbool 类型和stdbool.h 中的宏!并提供minimal reproducible example!目前,您似乎正在尝试使用 C++ 编译器编译 C 代码。

标签: c warnings


【解决方案1】:

根据C11,第 §6.5.8 章(强调我的

每个运算符<(小于)、>(大于)、<=(小于或等于)和>= (大于或等于) 如果指定的关系为真,则 yield 1,如果为真,则为 0 false。107) 结果的类型为int

哪个可能不TRUE 的类型相同,这似乎是您的代码本地的enum 值。

【讨论】:

  • 是的,正确的。但是有没有办法使用它的元素值设置枚举,即在我的例子中,0 为FALSE 和 1 为TRUE。也许像BOOL(0) 之类的FALSE
  • 枚举常量 int.
  • @user694733:两个都是坏建议!
  • @Olaf 对不起,先生,如果我在这里遗漏了什么,但我认为 enums 与普通的旧 int 类型不同,不是吗?
  • @SouravGhosh:不在 C 语言中(请参阅我的其他评论)! port70.net/~nsz/c/c11/n1570.html#6.7.2.2p3 这就是为什么我们应该坚持minimal reproducible example
猜你喜欢
  • 2021-12-24
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多