gccrun.cmd その5

gccrun.cmd で、ソースコードコンパイルとリンクが終わったら、次は、生成したアプリケーションの実行に移る。

:run
  REM 出力プログラム実行
  if %win%==1 (start %srb%.exe) else %srb%.exe
  goto end

変数 win が 1 ならば、start %srb%.exe を実行し、そうでなければ、%srb%.exe を実行する。

変数 win が 1 であるということは、コンソール画面が表れない、ウィンドウアプリケーションであるということだ。

gccrun.cmd を コマンド プロンプト (cmd.exe) から実行していた場合、start <何か>.exe を行うと、アプリケーションは、gccrun.cmd の外で立ち上がる。これによって、gccrun.cmd は、そのアプリケーションの終了を待たずに、即座に、次の処理に移ることができる。

ウィンドウアプリケーションの場合は、この起動方法で概ね問題ない。

一方で、<何か>.exe というコマンドを実行すると、アプリケーションは、gccrun.cmd の処理の中で実行されることになる。すると、gccrun.cmd は、アプリケーションが終了するまで、次の処理に移らず、待機状態になる。

この起動方法は、コンソールアプリケーションを起動するのに適している。なぜならば、現在の コマンド プロンプト の画面の中で、アプリケーションが立ち上がるからだ。

もしも、コンソールアプリケーションを start コマンドで実行した場合は、別の コマンド プロンプト が新たに開き、その中で起動する。この場合、コンソールアプリケーションが終了すると、同時に、その コマンド プロンプト もろともウィンドウが閉じるという事態が発生する。コマンド プロンプト の画面上で、アプリケーションの出力結果を確認したい場合には、この起動方法は、向いていないのだ。

逆に、ウィンドウアプリケーションのほうを %srb%.exe で実行しても、このような問題は発生しないのだが、gccrun.cmd の処理を止めることのメリットはなく、かつ、止めないことによっては、たとえウィンドウアプリケーションを起動中であっても、現在の コマンド プロンプト 画面で他のコマンドを打ち込んで実行できるという良さがあるため、start コマンドによる起動方法を採用している。