Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两个月前关闭。
下面的代码片段可以正常工作,但是如果我想在条件语句的第二部分为retv赋值,它会抛出编译器错误。我正在使用GCC C C编译器。
有人能解释为什么吗?
代码
错误
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两个月前关闭。
下面的代码片段可以正常工作,但是如果我想在条件语句的第二部分为retv赋值,它会抛出编译器错误。我正在使用GCC C 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;
最佳答案
这是因为三元条件具有比=
更高的运算符优先级。它将编译如下:
case mt1: sign == 0 ? (retv = 1) : (retv = 0);
10-08 01:25