什么是printf(),语句或表达式?为什么它与三元运算符一起使用?

时间:2014-08-13 07:28:39

标签: c printf conditional-operator

如果三元运算符要求表达式而不是语句,那为什么要编译printf();printf();是表达式还是声明?

2 个答案:

答案 0 :(得分:5)

当你调用一个函数(任何函数)时,它就是一个表达式。当您添加终止;时,将该表达式转换为语句。

实际上,您可以通过单独使用表达式将任何表达式转换为语句,并添加语句终止符;。例如,所有赋值都是表达式,例如

a = b + c

是一个表达式,但是

a = b + c;

是一个声明。

还应该注意的是,通常所有表达式都会返回"一个值。在赋值表达式的情况下,它返回赋值给的变量的值(因此在上面的示例中,赋值表达式在赋值后返回a 的值) 。这就是你如何将表达链接在一起的方法。在上面的示例中,语句只是丢弃赋值表达式的结果。

返回值的表达式的唯一例外是函数调用表达式,它调用具有void返回类型的函数。他们没有任何结果,也无法在链式表达中使用。


关于三元表达式,它需要三个子表达式,计算第一个表达式,并使用结果作为布尔值来选择应该评估其他两个表达式中的哪一个。

示例:

a < b ? printf("a < b\n") : printf("a >= b\n");

以上行是声明。该语句包含一个表达式,即三元表达式,该表达式包含三个子表达式(条件和两个函数调用)。

重要的是要知道只评估三元表达式的两个分支中的一个,因此上面的示例不会两次调用printf,只调用一次。

答案 1 :(得分:0)

加入Joachim的回答:

当您调用函数 printf时,它本身就是一个表达式,它根据打印的字符数返回一个值。但是,有人可能会丢弃此返回值,并且只对调用printf副作用感兴趣,这是为了将数据打印到 stdout

当你这样做时

a = b + c;

表示评估子表达式b + c,然后将其分配给a,它也是C中的表达式 - 它返回分配给左侧的值; ;使其成为一个陈述。