float
当我键入时,我实际上是在返回一个值,
,.
但它没有给我任何错误。然后,我尝试运行以下代码。
#include<stdio.h>
#include<conio.h>
int getValue();
int main()
{
int a = getValue();
printf("%d", a);
return 0;
}
int getValue()
{
return 2, 3;
}
现在输出为3,即返回第二个值。这发生在两年前,此后一直在寻找正确的答案。
通过研究这个问题的答案,我知道它在评估后返回了第二个值,但是它对第一个有什么作用?
我研究了堆栈的逻辑(如何在内部推入和弹出值),但我认为这与它没有任何关系。
它是处理两个值还是做其他事情?
引用C11
标准,第§6.5.17章,逗号运算符
逗号运算符的左操作数被评估为void表达式;在它的评估与正确操作数的评估之间存在一个顺序点。然后评估正确的操作数;结果具有其类型和价值。
现在,回答您的问题
它与第一个有什么关系?
可以说,第一个操作数(左手操作数)被求值,结果被丢弃。
注意:我提到的是结果,而不是效果。
只是要澄清一下,在您的情况下,您不会注意到效果,但是如果左手表达式和右手表达式都与同一个变量相关,则可以注意到它的效果。例如,让我们讨论一个简单的例子
return p=3, p+2;
我们可以将return
语句分解为
3
给变量p
[的左侧操作,
]p+2
,ehich生成值5
。[ ,
]的右侧运算符return
5
作为第二个参数的值的值[在该子句之后:“(,
运算符的)结果具有其(右操作数的评估)类型和值。”]观看现场演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句