在函数调用中,为什么逗号不是序列点?
In a function call, why isn't comma a sequence point?
在下面的代码中
int main(){
int a=3;
printf("%d %d %d",++a,a,a++);
return 0;
}
按照规定,来自 C99 附录 C:,
以下是5.1.2.3中描述的序列点:
- 在对参数求值后调用函数
(6.5.2.2)。
- 以下运算符的第一个操作数结束:逻辑
与 && (6.5.13);逻辑或 || (6.5.14);有条件的? (6.5.15);
逗号 , (6.5.17)
C 标准未定义计算函数参数的顺序。
但是,在 printf 的函数调用中,我们有以逗号分隔的参数,这些参数被归类为序列点。那么为什么这个语句会对应未指定的行为呢?
因为函数调用中的逗号不是comma operator而是分隔符。所以它不引入任何序列点。
在下面的代码中
int main(){
int a=3;
printf("%d %d %d",++a,a,a++);
return 0;
}
按照规定,来自 C99 附录 C:,
以下是5.1.2.3中描述的序列点:
- 在对参数求值后调用函数 (6.5.2.2)。
- 以下运算符的第一个操作数结束:逻辑 与 && (6.5.13);逻辑或 || (6.5.14);有条件的? (6.5.15); 逗号 , (6.5.17)
C 标准未定义计算函数参数的顺序。
但是,在 printf 的函数调用中,我们有以逗号分隔的参数,这些参数被归类为序列点。那么为什么这个语句会对应未指定的行为呢?
因为函数调用中的逗号不是comma operator而是分隔符。所以它不引入任何序列点。