考虑下面的C代码。

#include <stdio.h>

int main(void)
{
  int test = 0;
  int a= 10,b = 20;
  test ? a*2 : b*3;
  printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));

  return 0;
}

当试图编译时,它抛出以下错误。
file1.c:11:50: error: lvalue required as left operand of assignment
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));
                                              ^
file1.c:11:74: error: lvalue required as left operand of assignment
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));
                                                                      ^

我已经为赋值操作提供了一个l值作为左操作数,而且为什么它不在行中抛出错误
test ? a*2 : b*3;

它只在生产线上产生错误
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));

请解释一下。

最佳答案

您可能缺少括号,编译器认为您的意思是:
(test ? a = 200 : b) = 300
当你真正的意思是:
test ? (a = 200) : (b = 300)

关于c - 即使给定的l值在三元运算符中很好,赋值语句中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50960792/

10-11 22:32
查看更多