三元语句中的 C 逗号

标签 c operator-keyword conditional-operator comma-operator

int m = 5, d = 12, y = 1975, val;
    // May 12, 1975

谁能解释一下下面代码行中逗号运算符的功能/用途:

val = (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7;

above line由 Mike Keith 编写,用于计算给定日期(d = 日,m = 月,y = 年)的星期几。其中星期日 = 0,星期一 = 1,星期二 = 2,星期三 = 3,星期四 = 4,星期五 = 5,星期六 = 6。 我知道如果 d+=m<3 为真,则执行 y--,否则执行 y-2。我不明白的是 y-2 后面的逗号的用途。

最佳答案

逗号操作符将要执行的表达式分开,就像;一样。但是对于 ,,它们构成了一个完整的表达式,计算结果为最后一个子表达式的值。例如

int i = 1;
int j = (++i, i*2);
printf("%i", j)

打印出 4.

例如,它可以用在 for 表达式中,其中 3 个表达式需要在 header 中。例如

for(i = 0, j = 0; i < n; i++, j++)

关于三元语句中的 C 逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520421/

相关文章:

c - 我在尝试打开一个文件并将其写入另一个文件时遇到段错误

C:计算跨越多个字节的一系列位

c - sizeof 与 c 中的数组

C++ - 使用 GCC 编译时不匹配 'operator='

Java - if-else 和三元运算符之间的不同行为

c - 这个语句在c中如何执行条件操作?

C从两个数组中获取中间索引,变量初始化和三元运算符

c 为什么 realloc 不工作

C++ 迭代器运算符定义

javascript '=' 作为链接对象?