C 中带括号的奇怪语法

问题描述 投票:0回答:1

我得到了代码:

#include <stdio.h>
int main(void) {
    int a = 0, b = 0, c = 0;
    c = (a -= a - 5), (a = b, b + 3);
    printf("a = %d, b = %d, c = %d", a, b, c); // a = 0, b = 0, c = 5
}

我的任务是弄清楚它是如何工作的。我不明白这条线是怎么来的

c = (a -= a - 5), (a = b, b + 3); 

但是有效。

我的猜测是它的工作原理就像这段代码:

#include <stdio.h>

int main(void) {
    int a = 0, b = 0, c = 0;
    a -= a - 5;
    c = a;
    a = b;
    b + 3;
    printf("a = %d, b = %d, c = %d", a, b, c); //a = 0, b = 0, c = 5
}

因为结果是一样的。

但我不明白代码的第一个版本。所以首先,in改变a的值(a变成5),然后改变c的值(c变成a),然后in执行第二个括号中的表达式(这似乎根本不影响c的值,虽然是同一行代码,而且中间没有分号,只有逗号。

那个语法是什么?这种语法有名字吗?我只是不明白为什么它是这样写的以及为什么它会这样做。

另外,不太重要的是,这条线代表什么

b + 3;

做什么?难道就没什么吗?..

c syntax parentheses
1个回答
0
投票
c = (a -= a - 5), (a = b, b + 3);

它相当于

a -= a- 5;
c = (a = b, b + 3)

a -= a- 5;
a = b;
c = b + 3;

© www.soinside.com 2019 - 2024. All rights reserved.