今天发现了一段有趣的代码,如下:
printf("%d", (1, 2), 3);
好久没碰 C 语言了,看到这段代码有一种熟悉而又陌生的感觉。
那么结果是多少呢?
写个 Demo 跑一下就知道了呗:
#include <stdio.h>
int main () {
printf("%d", (1, 2), 3);
return 0;
}
编译运行,结果为 2
。
但是为什么呢?
先把这个表达式简化一下:
printf("%d", 2, 3);
编译运行一下可以发现,值同样为 2
。
这样就可以知道 (1,2)
的值就是 2
,那么 3
呢?
其实使用 %d
来匹配的时候,会根据个数来进行匹配,也就是说当 %d
只有一个的时候,就匹配一个表达式,所以这里就匹配了 2
。
当有多个 %d
时,就继续匹配后面的表达式,这样的写法也更为熟悉:
printf("%d%d", 2, 3);
结果为 23
。
这个问题解决了,我们再来看看表达式 (1,2)
为什么等于 2
。
根据 C 语言语法,,
为语句分隔符,程序先后执行两条语句,因此表达式 (1,2)
的值是最末尾的表达式 2
的值,等于 2
。
这属于赋值表达式,我们可以看一个相似的代码:
int x = ((1, 2), 3);
x
的值为 3
,因为按照语句执行顺序 3
为最后执行。
同理即可知道 (1,2)
的值就是 2
。