我想知道在C语言的三元运算符中,是否所有参数都是必需的?
例如。:
(exp1 ? : value2);
或者你需要写:
(expr1 ? value1: value2);
我这么问是因为如果你写:
(exp1 ? : value2);
如果expr1
是真的,会有什么回报? 最佳答案
它不是一个标准,但GCC extension(可能其他一些编译器也这样做):
5.7省略操作数的条件句
条件表达式中的中间操作数可以省略。那么如果
第一个操作数不是零,它的值是
条件表达式。
因此,表达式
x ? : y
如果不为零,则为x;否则为y。
这个例子完全等同于
x ? x : y
编辑:
正如@madhepository所指出的,这个缩写形式将计算
x
一次,而当x
为非零时,传统形式将第二次重新计算x
。