当我们返回一个有两个值的整数时,C中的逗号操作符做什么?



当我输入,而不是.时,我实际上返回了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章,逗号操作符

逗号操作符的左操作数计算为空表达式;在它的求值和右操作数的求值之间有一个序列点。然后对右操作数求值;结果有其类型和值。

现在,回答你的问题

与第一个有什么关系?

我们可以说,第一个操作数(左操作数)对求值,结果是被丢弃

注意:我提到的是结果,而不是效果

澄清一下,在你的例子中,你不会注意到的效果,但是你可以注意到的效果,如果左边和右边的表达式都与同一个变量相关。例如,让我们讨论一个简单的示例

return p=3, p+2;

我们可以将return语句分解为

  • 赋值3给变量p [,的左侧运算符]
  • 执行p+2,生成5的值。[,的右侧运算符]
  • return将值5作为第二个参数的值[在子句",运算符的结果具有其(右操作数的求值)类型和值"之后。)

查看现场演示

逗号运算符将从左到右求值并返回最右边的表达式或值。这相当于:

int getValue()
{
    (void)2;
    return 3;
}

相关内容

  • 没有找到相关文章

最新更新