在阅读了以下两篇文章之后。。。
What does the comma operator , do?
How does the Comma Operator work
我仍然不确定自己是否无法解析在其他人的源代码中找到的以下语句:

int i, n, val, locala = a, bestval = -INFINITY;

逗号运算符按从左到右的顺序计算,是吗?如果我们用括号来表示优先顺序,我想我们有这样的东西:
(int i, (n, (val, (locala = a, (bestval = -INFINITY)))));

那么,也许,原作等同于下面的内容?
int bestval = -INFINITY;
int locala = a;
int val;
int n;
int i;

如果是,为什么要将int关键字应用于所有变量,而不是只应用于最左边的变量i
而且,最右边的表达式返回它们的值,是吗?因此,locala = a可能在赋值之后返回locala的值。这是否意味着变量inval都被初始化?如果是,它们初始化为什么?-INFINITYa的值?

最佳答案

这个

int i, n, val, locala = a, bestval = -INFINITY;

是一个声明。
声明在C中按以下方式定义(没有所有细节)
declaration:
    declaration-specifiers init-declarator-listopt ;

init-declarator-list:
    init-declarator
    init-declarator-list , init-declarator

init-declarator:
    declarator
    declarator = initializer

声明说明符影响init声明符中的所有声明符-
列表。
如果您想在声明中使用逗号运算符,那么这样的声明可以如下所示
int i = 1, j = 2, k = ( ++i, j++, i + j );

这里的表达式( ++i, j++, i + j )用作基于逗号运算符的初始值设定项。
在声明i等于2j-3k-5之后。

关于c - 如何在C中解析使用逗号运算符的复杂表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46699042/

10-12 18:43