【发布时间】:2020-01-01 16:10:21
【问题描述】:
下面的代码 sn-p 可以正常工作,但是如果我想在条件语句的第二部分为 retv 赋值,则会引发编译器错误。我正在使用 GCC C 编译器。 谁能解释一下为什么?
代码
typedef enum {
mt1 = 23,
mt2 = 43,
mt3 = 53
} mts;
int getmt(mts value, int sign) {
int retv = -1;
switch(value) {
case mt1: sign == 0? retv=1 : retv; //ERROR if retv=0
break;
case mt2: break;
case mt3: break;
default: break;
}
return retv;
}
int main(void)
{
printf("val:%d\n", getmt(mt1, 0));
printf("val:%d\n", getmt(mt2, 0));
return 0;
}
错误
error: lvalue required as left operand of assignment
case mt1: sign == 0? retv=1 : retv=0; break;
【问题讨论】:
-
为什么使用三态运算符代替
if?它会损害可读性,并且不会使其更快或更好。 -
三元运算符被过度使用,它使代码更难阅读、理解和维护。请改用正确的
if语句。如果我正确理解您的代码,您想要的只是if (sign == 0) retv = 1; -
条件表达式:
retv=(sign==0)?1:retv; -
顺便说一下,您的错误信息与您显示的代码不匹配!重要的是要确保您向我们展示了一个正确的minimal reproducible example,它复制了您得到的错误,并展示了将该代码与来自该确切代码的完整和完整的错误输出(复制粘贴为文本)一起使用。请阅读how to ask good questions,以及this question checklist。
标签: c ternary-operator operator-precedence assignment-operator conditional-operator