我得到了代码:
#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 = (a -= a - 5), (a = b, b + 3);
它相当于
a -= a- 5;
c = (a = b, b + 3)
和
a -= a- 5;
a = b;
c = b + 3;