没有正文的 if 语句

If statement without a body

提问人:GingerBadger 提问时间:5/23/2020 更新时间:5/23/2020 访问量:281

问:

我希望在我的任何函数返回非零错误代码后使用语句停止执行流。但是,如果我使用“裸”逻辑语句,如||

void function myFun(void)
{
    struct myStruct *test = malloc(sizeof(struct myStruct));

    if (!test)
        return ;

    (subFun1(&test) ||
     subFun2(&test) ||
     subFun3(&test) ||
     subFun4(&test));

    free(test);
}

海湾合作委员会抱怨

error: value computed is not used [-Werror=unused-value] 

我也可以写这样的东西,

void function myFun(void)
{
    struct myStruct *test = malloc(sizeof(struct myStruct));

    if (!test)
        return ;

    if (subFun1(&test) ||
        subFun2(&test) ||
        subFun3(&test) ||
        subFun4(&test))
    ;

    free(test);
}

但它看起来超级尴尬。

处理这个问题的最佳方法是什么?

c if 语句 流控制

评论

2赞 Jonathan Leffler 5/23/2020
if (subFun1(&test) == 0 && subFun2(&test) == 0 && subFun3(&test) == 0) subFun4(&test);(或者您可以用于每个术语,但 IMO 并不那么明确)。!subFunN(&test)
0赞 GingerBadger 5/23/2020
@dxiv 但是在第一种情况下仍然获得我想要的控制流(即,如果任何函数返回非零值,则不会调用以下函数)?第二种方式总体上更好吗?还有更优雅的方式吗?
5赞 dxiv 5/23/2020
@GingerBadger 对不起,我一开始误解了你所说的“流”的意思,所以请放心地忽略我之前现已删除的评论。您可以重写第一个版本以使警告静音,尽管最终这是一个偏好问题。(void)(subFun1(&test) || ...);
4赞 Tom Karzes 5/23/2020
禁止显示有关未使用值的警告的标准方法是将其强制转换为 。这不会生成任何代码,但会以不会导致警告的方式丢弃该值。void
0赞 Imeguras 11/8/2021
强制转换不会导致它总是返回 false 吗?@dxiv

答: 暂无答案