我的目的是尽量写出一个简明扼要的函数。
int main(void) { int a; return ( a = 42, a++, if (a > 42) a *= -1, a); }
我希望返回一个-43,但是我得到了一个编译错误。
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语句可以重写为:
return
a = 42; return ++a > 42 ? -a : a;
就你的目标而言,它没有任何价值。你不应该写聪明的代码。它会损害可读性和可维护性。(尽管在这个例子中,它不会)记住:1.* 简单是最复杂的。-莱昂纳多·达芬奇1. 任何傻瓜都能写出计算机能理解的代码。优秀的程序员写出人类能理解的代码。*-马丁·福勒
suzh9iv82#
如果你的目标是写函数,不要把它写在main函数中,把它写在main函数之外,然后在main函数中调用函数。你出错的原因是因为你的语句表达式,这里有一个解释,所以我猜你想把a作为参数,否则你可以在func中把a赋值为42
a
func
int func(int a){ a++; return (a > 42 ? a *= -1 : a); } int main(void) { printf("%d",func(42)); }
inb24sb23#
你试过这个吗?
int main(void) { int a; return (a = 42, a++, a > 42 ? a = a * -1 : a); }
3条答案
按热度按时间m1m5dgzv1#
我的目的是尽量写出一个简明扼要的函数。
可以简单地重写为:
或者,如果您不喜欢这样的表达式,那么您可以查找条件运算符(通俗地称为三元运算符),其形式为:
因此,
return
语句可以重写为:就你的目标而言,它没有任何价值。你不应该写聪明的代码。它会损害可读性和可维护性。(尽管在这个例子中,它不会)
记住:
1.* 简单是最复杂的。-莱昂纳多·达芬奇
1. 任何傻瓜都能写出计算机能理解的代码。优秀的程序员写出人类能理解的代码。*-马丁·福勒
suzh9iv82#
如果你的目标是写函数,不要把它写在main函数中,把它写在main函数之外,然后在main函数中调用函数。你出错的原因是因为你的语句表达式,这里有一个解释,所以我猜你想把
a
作为参数,否则你可以在func
中把a
赋值为42inb24sb23#
你试过这个吗?