我想知道在C语言的三元运算符中,是否所有参数都是必需的?
例如。:

(exp1 ? : value2);

或者你需要写:
(expr1 ? value1: value2);

我这么问是因为如果你写:(exp1 ? : value2);如果expr1是真的,会有什么回报?

最佳答案

它不是一个标准,但GCC extension(可能其他一些编译器也这样做):
5.7省略操作数的条件句
条件表达式中的中间操作数可以省略。那么如果
第一个操作数不是零,它的值是
条件表达式。
因此,表达式

 x ? : y

如果不为零,则为x;否则为y。
这个例子完全等同于
 x ? x : y

编辑:
正如@madhepository所指出的,这个缩写形式将计算x一次,而当x为非零时,传统形式将第二次重新计算x

09-12 11:00