プログラムが OS から起動されると、C/C++ 言語では、まず、プログラム実行の準備を行います。このルーチンでは、プログラムに必要なメモリーの確保やグローバル変数の設定などを行っています。このルーチンのことをスタートアップルーチンといいます。スタートアップルーチンの最後では、main 関数を呼びます。このため、C/C++ では、「プログラムは main 関数から始まる」ということになります。main関数のことをエントリーポイント関数(導入関数)などと呼ぶとがります。main 関数が終了すると、プログラムは、確保していたメモリーの解放、閉じられていないファイルの処理など終了処理を行います。
C++ for CGI では、CGI プログラムを作りやすくするために天下り変数やプリプロセス指令を導入しています。これらのは、プログラムが始まる前に処理されなければなりません。また、プログラマによけいな手間をかけさせないために、自動的に処理されなければなりません。従って、スタートアップルーチンでこれらの処理をすることが良いと言うことになります。しかし、スタートアップルーチンはコンパイラごとに違いますので、コンパイラごとに書き換えねばなりません。これは手間がかかることです。さらに、スタートアップルーチンが公開されているコンパイラは書き換えが可能ですが、公開されていなければ書き換えることができません。そこで、C++ for CGI では、プロジェクトファイルを作り、その中に main 関数を定義します。この main 関数の中で、天下り変数などの処理を行い、最後に start 関数を呼びます。プロジェクト関数は C++ for CGI が作成し、プログラマは関与しません。従って、プログラマから見れば start 関数がエントリーポイント関数として機能します。
C++ for CGIでは、「プログラムはstart関数から始まる」ということになります。