psy*_*o36 1 c printf conditional-operator
如果三元运算符要求表达式而不是语句,那为什么要编译printf();?是printf();表达还是陈述?
当你调用一个函数(任何函数)时,它就是一个表达式.添加终止;时,将该表达式转换为语句.
实际上,您可以通过单独使用表达式将任何表达式转换为语句,并添加语句终止符;.例如,所有赋值都是表达式,例如
a = b + c
Run Code Online (Sandbox Code Playgroud)
是表达,但是
a = b + c;
Run Code Online (Sandbox Code Playgroud)
是一份声明.
还应注意,通常所有表达式"返回"一个值.在赋值表达式的情况下,它返回赋值给的变量的值(因此在上面的示例中,赋值表达式返回赋值a 后的值).这就是你如何将表达链接在一起的方式.在上面的示例中,语句只是丢弃赋值表达式的结果.
返回值的表达式的唯一例外是函数调用表达式,它调用具有void返回类型的函数.它们没有任何结果,也不能用于链式表达式.
关于三元表达式,它需要三个子表达式,计算第一个并使用结果作为布尔值来选择应该评估其他两个表达式中的哪一个.
例:
a < b ? printf("a < b\n") : printf("a >= b\n");
Run Code Online (Sandbox Code Playgroud)
以上这一行是一份声明.该语句包含一个表达式,即三元表达式,该表达式包含三个子表达式(条件和两个函数调用).
重要的是要知道三元表达式的两个分支中只有一个将被评估,因此上面的例子不会调用printf两次,只调用一次.