C 什么是printf()、语句或表达式?为什么它与三元运算符一起工作?

C 什么是printf()、语句或表达式?为什么它与三元运算符一起工作?,c,printf,conditional-operator,C,Printf,Conditional Operator,如果三元运算符要求的是表达式而不是语句,那么它为什么要编译printf()?是printf()表达式或语句?调用函数(任何函数)时,它是表达式。当您添加终止将该表达式转换为语句 事实上,您可以将任何表达式转换为语句,方法是单独使用表达式,并添加语句终止符。例如,所有赋值都是表达式,因此 a = b + c 是一个表达式,但是 a = b + c; 这是一份声明 还应注意,通常所有表达式都“返回”一个值。对于赋值表达式,它返回被赋值的变量的值(因此在上面的示例中,赋值表达式在赋值后返回a的值)

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

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

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

a = b + c
是一个表达式,但是

a = b + c;
这是一份声明

还应注意,通常所有表达式都“返回”一个值。对于赋值表达式,它返回被赋值的变量的值(因此在上面的示例中,赋值表达式在赋值后返回
a
的值)。这就是将表达式链接在一起的方法。在上面的示例中,语句只是丢弃赋值表达式的结果

返回值的表达式的唯一例外是函数调用表达式,它使用
void
返回类型调用函数。它们没有任何结果,不能用于链式表达式


关于三元表达式,它接受三个子表达式,对第一个子表达式求值,并使用结果作为布尔值来选择其他两个表达式中应求值的表达式

例如:

a < b ? printf("a < b\n") : printf("a >= b\n");
a=b\n”);
上一行是一个声明。该语句包含一个表达式,即三元表达式,该表达式包含三个子表达式(条件和两个函数调用)

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

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

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

a = b + c
是一个表达式,但是

a = b + c;
这是一份声明

还应注意,通常所有表达式都“返回”一个值。对于赋值表达式,它返回被赋值的变量的值(因此在上面的示例中,赋值表达式在赋值后返回
a
的值)。这就是将表达式链接在一起的方法。在上面的示例中,语句只是丢弃赋值表达式的结果

返回值的表达式的唯一例外是函数调用表达式,它使用
void
返回类型调用函数。它们没有任何结果,不能用于链式表达式


关于三元表达式,它接受三个子表达式,对第一个子表达式求值,并使用结果作为布尔值来选择其他两个表达式中应求值的表达式

例如:

a < b ? printf("a < b\n") : printf("a >= b\n");
a=b\n”);
上一行是一个声明。该语句包含一个表达式,即三元表达式,该表达式包含三个子表达式(条件和两个函数调用)


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

补充了Joachim的答案:

调用函数
printf
时,函数本身就是一个表达式,它根据打印的字符数返回一个值。然而,人们可能会放弃这个返回值,只关心调用
printf
的副作用,即将数据打印到stdout

当你这样做的时候

a = b + c;

它意味着计算子表达式
b+c
,然后将其分配给
a
,这也是c中的一个表达式-它返回分配给左侧的值;
将其变成一个陈述。

在约阿希姆的回答中添加:

调用函数
printf
时,函数本身就是一个表达式,它根据打印的字符数返回一个值。然而,人们可能会放弃这个返回值,只关心调用
printf
的副作用,即将数据打印到stdout

当你这样做的时候

a = b + c;

它意味着计算子表达式
b+c
,然后将其分配给
a
,这也是c中的一个表达式-它返回分配给左侧的值;
将其变成一个语句。

您能给出一个简短的代码示例,说明您的问题吗?这会让我更清楚。它是一个函数,有一个返回值(打印值IIRC的数量),所以它可以参与一个表达式。“三元if”应该是什么意思?您是指条件运算符
?:
?您不能使用
printf(
在三元表达式中;但是您可以使用
printf(
。函数调用是一个表达式;语句的一种形式是后跟分号的表达式。您能给出一个简短的代码示例来说明您的问题吗?这会让我更清楚。它是一个函数,有一个返回值(打印值IIRC的数量),所以它可以参与一个表达式。“三元if”应该是什么意思?您是指条件运算符
?:
?您不能使用
printf(
在三元表达式中;但是您可以使用
printf(
。函数调用是一个表达式;语句的一种形式是表达式后跟分号.Iek。