【发布时间】:2018-08-13 08:12:30
【问题描述】:
我有这个表达式和 ?: operator:
(adc.Voltage1[Counter.ADC_ConversionCount] = ADC_readResult(Handler.myAdc, ADC_ResultNumber_1)) > 10 ? Counter.WriteOut = 1 : Counter.WriteOut = 0;
和 if-else 一样的表达式:
if((adc.Voltage1[Counter.ADC_ConversionCount] = ADC_readResult(Handler.myAdc, ADC_ResultNumber_1)) > 10 ){
Counter.WriteOut = 1;
}else{
Counter.WriteOut = 0;
}
为什么在第一种情况下会出现“表达式必须是可修改的左值”错误?
ADC_readResult 函数返回类型为 uint_least16_t。下面是 Counter 结构体定义和 ADC 结构体定义:
typedef struct __COUNTERS__ {
uint16_t WriteOut;
uint16_t ADC_ConversionCount;
uint16_t ADC_CycleCount;
uint8_t LimitADCReached1;
uint8_t LimitADCReached2;
uint8_t LimitADCReached3;
uint8_t LimitADCReached4;
uint8_t LimitADCReached5;
} COUNTERS;
typedef struct __ADC_VOLTAGES__ {
uint16_t Voltage1[ADC_VAL];
uint16_t Voltage2[ADC_VAL];
uint16_t Voltage3[ADC_VAL];
uint16_t Voltage4[ADC_VAL];
uint16_t Voltage5[ADC_VAL];
} ADC;
【问题讨论】:
-
就算能编译,写这么复杂难读的表达式也是不好的做法。
-
仅仅因为您可以在一行中编写一个完整的 C 程序,并不意味着您可以滥用它。你的线太可怕了!易于阅读和解释的代码比作者认为他/她非常聪明地将许多东西塞进一行的代码更易于维护。
标签: c if-statement