首先我们要知道在C语言中,逗号表达式的优先级是最低的 (也就是说赋值运算符 '=' 都比逗号表达式优先级高)。
例如:
int a=(2*6,4+8,55);
请问a=?
答:先计算括号内的逗号表达式的值,该逗号的值为55,再把55赋值给a,所以a=55
int a=5;
a=(a=2*3,a*4),a+10;
请问a=?
很多人觉得a=34,计算方法如下:a=6,a又等于6*4=24,最后a=24+10=34;
实际上这个答案是错误的,因为读者可能犯了一个错误,认为逗号表达式的值是取自最后一次计算的结果。
若回过头看我红色加粗标注的地方,就会发现原来a=24已经完成了计算(此时表达式变成a+10),
之后又算了一步没用的操作。
逗号表达式的用途:
在for循环里经常会用到,除了在for循环里用到外,我们在宏定义里也经常遇到:
#define SWAP(a,b) a^=b,b^=a,a^=b
而传统多行语句的写法是do {...} while(0);
相比而言,很多时候在宏中还有用逗号表达式写简洁多了。