シーケンスポイントとは
コンピュータープログラミングのシーケンスポイントは、変数の値が完全に計算され、プログラムの実行中に発生する瞬間で、以前の操作からの変更は保留されておらず、将来の式の計算はまだ実行されていません。 関数内のコードの実行前、「for」や「if」などのステートメントの制御式の最後など、シーケンスポイントが存在する場所は、主にC言語標準で定義されています。 Cコードの単純な行など、完全な式の最後。 シーケンスポイントを定義する理由のいくつかは、あいまいな状況、未定義の動作を引き起こす状況、またはコンパイラーを混乱させて予測できないコードを生成する状況を回避するためです。 多くの場合、プログラマはシーケンスポイントを明示的に心配しませんが、コンパイラの作成では、コードが正しく実行されることを保証するためにこの概念は非常に重要です。
Cプログラミング言語のシーケンスポイントの例は、ステートメントA = A + B;にあります。 この式では、セミコロンがシーケンスポイントです。 式が完了すると、Aの値が評価され、次の式が始まるまで残差計算は実行されません。 等号はシーケンスポイントではありません。Aの値は、式全体でコンパイラによって任意の順序で変更される可能性があるためです。
シーケンスポイントの主なルールは、値の変化を計算する以外の目的で、ポイント間で変数に複数回アクセスしないことです。 このルールの違反は、配列に値を割り当てるときに最もよく表されます。 変数AとIという配列がある場合、Cで文法的に式I [A] = A ++を書くことができます。 ここでは、変数は現在の値を評価する以外の目的で複数回アクセスされます。 つまり、配列Iへのインデックスとして使用されます。つまり、コンパイラは、インデックスとして使用される前または使用後にAをインクリメントし、プログラムでは信頼できない予測不可能な動作を作成する可能性があります。
シーケンスポイントは、基本的に、ステートメントがコンパイラによって一貫して評価および実行されることを保証する方法と見なすことができます。 また、定義された動作は予測可能であるため、コンパイラーは最適化戦略を採用できます。 C言語標準には、シーケンスポイントの3つの主要なインスタンスがあります。つまり、ほとんどのCステートメントが行うように、関数の実行開始時、論理演算子とコンマのポイント、セミコロンで終わる完全な式の終わりです。 。