在C语言中,是否可以在return语句中插入if条件?

pbgvytdp  于 2023-02-11  发布在  其他
关注(0)|答案(3)|浏览(201)

我的目的是尽量写出一个简明扼要的函数。

int main(void)
{
    int a;

    return (
        a = 42,
        a++,
        if (a > 42) a *= -1,
        a);
}

我希望返回一个-43,但是我得到了一个编译错误。

m1m5dgzv

m1m5dgzv1#

我的目的是尽量写出一个简明扼要的函数。

int a;

return (
   a = 42,
   a++,
   if (a > 42) a *= -1,
   a);

可以简单地重写为:

return -43;

或者,如果您不喜欢这样的表达式,那么您可以查找条件运算符(通俗地称为三元运算符),其形式为:

/* if a is logically true (does not evaluate to zero) 
*  then evaluate expression b, otherwise 
*  evaluate expression c
*/
a ? b : c;

因此,return语句可以重写为:

a = 42;
return ++a > 42 ? -a : a;

就你的目标而言,它没有任何价值。你不应该写聪明的代码。它会损害可读性和可维护性。(尽管在这个例子中,它不会)
记住:
1.* 简单是最复杂的。-莱昂纳多·达芬奇
1.
任何傻瓜都能写出计算机能理解的代码。优秀的程序员写出人类能理解的代码。*-马丁·福勒

suzh9iv8

suzh9iv82#

如果你的目标是写函数,不要把它写在main函数中,把它写在main函数之外,然后在main函数中调用函数。你出错的原因是因为你的语句表达式,这里有一个解释,所以我猜你想把a作为参数,否则你可以在func中把a赋值为42

int func(int a){
    a++;
    return (a > 42 ? a *= -1 : a);
}

int main(void)
{
    printf("%d",func(42));
}
inb24sb2

inb24sb23#

你试过这个吗?

int main(void)
{
    int a;

    return (a = 42, a++, a > 42 ? a = a * -1 : a);
}

相关问题