在C语言中,逗号运算符(, )允许将多个表达式组合在一起,其结果是最后一个表达式的值。
示例:
int a = 1, b = 2, c; c = (a += 2, b += 3, a + b); // 首先增加a,然后b,然后将a + b相加
使用:
for循环的头部中使用,需要执行多个操作的地方。细节:
示例循环:
for (i = 0, j = 10; i < j; ++i, --j) { /* ... */ }
逗号作为运算符和作为函数参数列表中的分隔符有什么区别?
常见错误: 认为逗号在任何地方都是运算符,并且总是合并表达式。
正确答案: 逗号只有在初始化列表、参数和数组元素外才能作为运算符。例如:
int x = (1, 2); // x == 2,这里是运算符 void foo(int a, int b) { ... } // 这里是分隔符
逗号作为运算符仅在括号内工作,在其他情况下只是分隔符。
故事
在宏中,在do { ... } while (0)内部使用逗号运算符来合并指令而不使用括号,结果造成了像if (a) MACRO(); else ...这样的语法错误,因为宏的语法不正确。
故事
在逗号运算符的优先级与赋值运算符的优先级之间的混淆导致表达式a = b, c = d;像(a = b), (c = d)那样工作,而程序员认为两个赋值是同时作为一个表达式的一部分执行的。
故事
在函数中使用逗号来顺序调用函数,但忽视只有最后一个值被返回。假设结果表达式合并了所有调用的效果,而实际上只有第一个调用的副作用是重要的,它们的返回值被丢弃。