シーケンス ポイント全体に対する私の理解は基本的なものです。私が持っているのは、「シーケンスポイントに遭遇すると、以前の評価のすべての副作用が完全であることを確認できる」という大雑把な直感的な考えだけです。また、動作が未定義のようなステートメントで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)
はいの場合、どのように?特に 2 番目のケースで、コンマがシーケンス ポイントでない場合、代入で使用する前に、コンマがx
増加したことをどのように確認できますか? 最初のステートメントでは、アドレスを に割り当てる前に、 が初期化され、メモリが割り当てられていることをどのように確認できますか? 安全にプレイして、上記に次を使用する必要があります。4
y=x*2
a
ptr
int a=4,*ptr;
ptr=&a;
と
x+=4;
y=x*2;
編集コンマ演算子についての私の理解は、それらのステートメントが安全であることを教えてくれます。しかし、シーケンスポイントとそのようなものがどのようprintf("%d",a++,++a,a++)
に定義されていないかについて読んだ後、私は考え直しました。