【问题标题】:Boolean expressions + short-circuit布尔表达式 + 短路
【发布时间】:2019-08-27 11:16:52
【问题描述】:

我想用布尔表达式 + 短路评估打印一条消息(我不允许使用 if/while/for ),但在 C-Lion 中一切正常,但在其他编译器中显示:

hw2q1.c: In function 'decision':
hw2q1.c:38:55: error: value computed is not used [-Werror=unused-value]
|
^
S

我该如何解决这个警告?

我在 C-Lion 中尝试过,但似乎没有出现任何问题。

void decision(int DragonA,int DragonB,int DragonC) {

         (DragonA == 1 && print_dragonX_sent('A') )   ||
         (DragonB == 1 && print_dragonX_sent('B') )   ||
         (DragonC == 1 && print_dragonX_sent('C') )   ||
         (print_no_dragon());
}

【问题讨论】:

  • 你正在用你的表达式计算一个布尔值,但你没有使用它。鉴于表达式有副作用,我不确定它是否应该归类为错误,但至少值得警告。
  • 我猜如果你只对副作用感兴趣而不是整个表达式的值,你可以通过将整个东西转换成void来消除警告
  • @PaulOgilvie 我该如何解决这个警告?
  • EugeneSh 为您提供了解决方案。将整个表达式转换为 void
  • 像@EugeneSh 一样。建议:强制转换为 void,即(void) ((Dra....)

标签: c debugging


【解决方案1】:

你的功能基本没问题。我希望符合标准的 C 编译器能够接受它。

但是,您使用的编译器选项似乎拒绝引发任何类型的诊断的代码,即使是通常只是非致命警告的代码。它正在诊断的特定问题是您计算一个值,然后让它不使用。 C 允许这样做,但有时会出现错误,因此可能需要警告。

警告该特定问题的编译器通常可以通过将有问题的值转换为类型void 来满足要求。这可以被视为告诉编译器您确实是要忽略该值。例如:

    (void) (
        (DragonA == 1 && print_dragonX_sent('A')) ||
        (DragonB == 1 && print_dragonX_sent('B')) ||
        (DragonC == 1 && print_dragonX_sent('C')) ||
        print_no_dragon()
    );

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2010-09-21
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多