プログラムを分割した場合、C++ for CGI はすべてのファイルを走査しプリプロセス指令を収集します。プリプロセス指令を無効にする指令はありません。複数の同じ文字列の設定があっても重複して送信することはありませんが、どの設定が有効になるか不定です。したがって、プリプロセス指令は一つのファイルにまとめて記述してください。収集されたプリプロセス指令は、プロジェクトファイルの先頭に、コメントとして記述されます。
C++ for CGI のプリプロセス指令の順番は関係ありません。C++ for CGI が適当に処理します。C/C++ 言語には、例えば、#include , #define など多くのプリプロセス指令があります。C++ for CGI は C/C++ のプリプロセッサーがソースファイルを処理する前にそれを処理します。したがって、#include , #ifdef など C/C++ のプリプロセス指令をいっさい無視します。つまり、#ifdef などで制御できないということです。
| 指令 | 説明 |
|---|---|
| SET_HEADER | HTTP応答ヘッダキューに文字列を追加する |
| SET_HEAD | HTML文書ヘッダキューにタグを追加する |
| COUT_HEADER | HTTP応答ヘッダキューの内容を start 関数の前に送信する |
| COUT_HEAD | HTTP応答ヘッダキュー、HTML文書ヘッダキューの内容をstart関数の前に送信する |
| BEGIN_HTML | COUT_HEADの別名 |
| END_HTML | CGI プログラムが終了する前に </BODY>\n</HTML>\n を出力する |
| #configure | 初期設定ファイルを指定する |
#include <acpplib.h>
//プリプロセス指令
#configure "bmi.conf"
#pragma SET_HEADER Content-Type: text/html
#pragma COUT_HEADER
#pragma SET_HEAD <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
#pragma SET_HEAD <HTML LANG="ja">
#pragma SET_HEAD <HEAD>
#pragma SET_HEAD <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=euc-jp">
#pragma SET_HEAD <!-- 漢字コードはEUC (これはエディター用) -->
#pragma SET_HEAD <META NAME="keywords" CONTENT="コンパイラ,CGI,C++,GCC">
#pragma SET_HEAD <TITLE>プリプロセス指令</TITLE>
#pragma SET_HEAD <LINK REL="stylesheet" TYPE="text/css" HREF="css_sheet.css">
#pragma SET_HEAD <META HTTP-EQUIV="pragma" CONTENT="no-cache">
#pragma SET_HEAD <META NAME="description" CONTENT="abcdefghikjh">
#pragma SET_HEAD <META NAME="robots" CONTENT="noindex,nofollow">
#pragma SET_HEAD <META NAME="generator" CONTENT="version 1.0">
#pragma SET_HEAD <META NAME="author" CONTENT="ENDOU">
#pragma SET_HEAD </HEAD>
#pragma SET_HEAD <BODY BGCOLOR="#DDFFFF">
#pragma COUT_HEAD
#pragma END_HTML
//天下り変数
given double fWeight,fHeight;
given string fName;
//CGIスタート関数
void start()
{
double bmi;
string himan;
bmi = 10000 * fWeight / (fHeight * fHeight);