C/C++ sequence point by Robbie Hatley on CLC
I was just googling "sequence point", trying to find more info on this,
and I ran across http://c-faq.com/ which is, lo and behold, the FAQ for
this group. That site mentions the following two sentences from the
C standard:
Between the previous and next sequence point an object shall
have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed
only to determine the value to be stored.
After staring at those for a while I think I understand them.
If I'm getting the idea right, it says:
1. You aren't supposed to alter the same variable twice between
sequence points.
2. If you alter a variable between two sequence points, you're
not supposed to use the original value of that variable for
any purpose other than computing the final value to be stored
back into the variable.
For example, I think the following violates those rules:
int main()
{
int y=0;
int x=7;
y = 2*x + x++; // violates sentence 2
printf("y = %d", y); // undefined behavior
y=0;
x=7;
y = x++ + x++; // violates sentences 1 and 2
printf("y = %d", y); // undefined behavior
return 0;
}
and I ran across http://c-faq.com/ which is, lo and behold, the FAQ for
this group. That site mentions the following two sentences from the
C standard:
Between the previous and next sequence point an object shall
have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed
only to determine the value to be stored.
After staring at those for a while I think I understand them.
If I'm getting the idea right, it says:
1. You aren't supposed to alter the same variable twice between
sequence points.
2. If you alter a variable between two sequence points, you're
not supposed to use the original value of that variable for
any purpose other than computing the final value to be stored
back into the variable.
For example, I think the following violates those rules:
int main()
{
int y=0;
int x=7;
y = 2*x + x++; // violates sentence 2
printf("y = %d", y); // undefined behavior
y=0;
x=7;
y = x++ + x++; // violates sentences 1 and 2
printf("y = %d", y); // undefined behavior
return 0;
}
<< Home