Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?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