我对整个序列点的理解是基本的。我所拥有的只是一些粗略的直观想法,即“一旦遇到序列点,我们可以确定之前评估的所有副作用都是完整的”。我还读到,在printf("%d",a++,++a,a++)
行为未定义之类的语句中,逗号不表示序列点,而分号表示。因此,与其凭直觉进行猜测和猜测,我觉得一个非常严谨和确凿的答案会对我有很大帮助。
以下类型的语句在 C 中是安全且确定的:
int a=4,*ptr=&a; //Statement 1
x+=4,y=x*2; //Statement 2 (Assume x and y are integer variables)
如果是,如何?特别是在第二种情况下,如果逗号不是序列点,我们如何确定在赋值中使用它之前x
已经递增了?对于第一条语句,我如何确定在分配地址之前已经初始化并分配了内存?我应该安全地使用以下内容:4
y=x*2
a
ptr
int a=4,*ptr;
ptr=&a;
和
x+=4;
y=x*2;
编辑我对逗号运算符的理解告诉我这些语句是安全的。但是在阅读了关于序列点以及类似的东西printf("%d",a++,++a,a++)
是如何未定义的之后,我有了第二个想法。