c - 当我们返回具有两个值的整数时,C 中的逗号运算符有何作用?

标签 c comma-operator

<分区>

当我输入 , 而不是 . 时,我实际上返回了一个 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,即返回第二个值。这件事发生在两年前,从那时起就在寻找合适的答案。

学习answers to this question我开始知道它在求值后返回第二个值,但它对第一个值有什么作用?

我研究了堆栈的逻辑(如何在内部推送和弹出值),但我认为这与它没有任何关系。

它是处理这两个值还是做其他事情?

最佳答案

引用 C11 标准,章节 §6.5.17,逗号运算符

The left operand of a comma operator is evaluated as a void expression; there is a sequence point between its evaluation and that of the right operand. Then the right operand is evaluated; the result has its type and value.

现在,回答你的问题

what does it do with the first one?

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

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

澄清一下,在您的情况下,您不会注意到该效果,但您可以注意到如果左右 watch 达式都与同一个变量。例如,让我们讨论一个简单的例子

return p=3, p+2;

我们可以像这样分解return语句

  • 将值 3 赋给变量 p [, 的左侧运算符]
  • 执行p+2,生成值5[, 的右侧运算符]
  • 返回5 作为第二个参数的值 [在子句之后:“结果( 运算符)有它的(右操作数的评估)类型和值。”]

查看 live demo .

关于c - 当我们返回具有两个值的整数时,C 中的逗号运算符有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30453968/

相关文章:

c - 为什么 isnumber() 函数存在于某些 Unix 发行版中,而其他发行版中却没有?

c - C编程中的段错误链表

c++ - 为什么用逗号进行双重初始化是非法的?

c++ - 逗号运算符的左右操作数无效(警告)

c - 了解逗号运算符

c - 为什么这种逗号的使用在表达式中有效,但在声明中却失败了?

c - 声明内联关键字的差异

C-divide 输入字符串 - 分割错误

c - 在 C 中运行时打印变量的值

c++ - 对逗号在 C/C++ 中的工作方式有些困惑