C语言中三目运算符与其他运算符混用时容易忽略优先级的问题

c = a + (CONST > b)?(CONST):(b);

观察上面的表达式,我们会简单的认为先计算(CONST > b)?(CONST):(b),然后其结果与a相加,赋值给从。但实际的执行顺序是先执行 a + (CONST > b),其结果再参与到三目运算符的运算,所以如果a + (CONST > b)的结果不为零,则c始终等于CONST。

正确的写法是把三目运算符表达式再用一个括号括起来。

发表评论

邮箱地址不会被公开。 必填项已用*标注