在下面的代码在函数调用中,为什么逗号不是序列点?
int main(){
int a=3;
printf("%d %d %d",++a,a,a++);
return 0;
}
作为指定,从C99附录C:
以下是5.1.2.3中描述的序列点:
- 给函数的调用,在参数评估后 (6.5.2.2)。
- 以下操作符的第一个操作数的结尾:逻辑 AND & &(6.5.13);逻辑OR || (6.5.14);有条件? (6.5.15); 逗号(6.5.17)
函数参数的求值顺序未定义,如C标准所指定。
但是,在printf的函数调用中,我们有用逗号分隔的参数,它们被分类为序列点。那么为什么这个陈述对应于未指定的行为呢?
要清楚的是:'printf'调用中的这些逗号是* not *顺序点,并且它们当然不会赋予明确未定义的'a ++'和'++ a'组合上的任何明确定义。 –