C 布尔表达式+;短路

C 布尔表达式+;短路,c,debugging,C,Debugging,我想打印一条带有布尔表达式+短路求值的消息(我不允许使用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,in

我想打印一条带有布尔表达式+短路求值的消息(我不允许使用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());
}

你的功能基本上很好。我希望一个合格的C编译器接受它

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

警告该特定问题的编译器通常可以通过将有问题的值强制转换为type
void
来满足。这可以被看作是告诉编译器您确实想忽略该值。例如:

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

您正在使用表达式计算布尔值,但不使用它。考虑到这个表达式有副作用,我不确定它是否应该被归类为错误,但至少值得一提。我想如果你只对副作用感兴趣,而对整个表达式的价值不感兴趣,你可以通过将整件事置于
无效状态来消除警告
@PaulOgilvie我如何解决这个警告?尤金尼什给了你解决方案。将整个表达式强制转换为
void
。建议:强制转换为无效,即
(无效)((Dra…)