制御構造の種類は言語によって様々だが、典型的には以下のようなものがある（用語「ブロック」については、ブロック の記事を参照）。
割り込みとシグナルは制御フローを変化させる別の機構であり、サブルーチンに似ているが、通常は言語内からではなく外部のイベントなどの結果として非同期に発生するものである（言語内から外部のイベントを引き起こし、結果として発生させることもできる例もある。たとえば、ゼロ除算などでそのようになるシステムがある）。自己書き換えコードも副作用によって制御フローを変化させることができる。割り込み的なものを扱うことができるプログラミング言語（の機能）はいくつかある。自己書き換えをプログラマが明示的に扱えるプログラミング言語はあまりないが、初期化の時だけ特別扱いが必要といったコードの最適化に自己書き換えを利用する、処理系の実装上のテクニックといったようなものもある。
原始的な機能.
ラベル.
行番号は一部の言語（FORTRANやBASIC）でラベルの一種として使われ、負でない整数がソースコードの各テキスト行の先頭に置かれる。行番号を使用する言語では、連続で実行される文には行番号が増えるように行番号を与える必要がある、とBASICしか知らない者は誤解しているが、FORTRANにはそのような制限は無い。BASICで行番号が昇順なのは、テキストの編集にフルスクリーンエディタが一般的ではなかった時代のラインエディタのみによる編集では、行番号に従ってシステムが並べ直してくれたほうが便利だったからであり、「行番号が増えるように行番号を与える必要がある」というのは本末逆転である。例えば BASIC では次のようになっている。
goto.
goto 文の実行により、その次に実行する文は、ラベルが示す箇所の直後の文となる。
サブルーチン.
サブルーチンには、手続き、ルーチン、プロシージャ、関数（特に値を返す場合）、メソッド（特に何らかのクラスに属する場合）など様々な名称がある。
サブルーチンに引数があればさらに便利になる。多くのプログラミング言語には平方根を求めるサブルーチンが組み込まれており、引数として平方根を求めたい数を与えることができる。