プリプロセス指令

HTTP応答 ヘッダや HTML文書のヘッダ部分などの定型部分をプログラムから切り離すことができます。
初期設定ファイルを指定することができます。

説明

CGI プログラムは、HTML文書に先立って、"Content-Type: text/html"などの HTTP応答ヘッダを送信しなければなりません。また、HTML文書のヘッダ部分はどのファイルも同じようなものです。これらは、定型的ですので、出力には専用のサブルーチンを利用することになります。このサブルーチンは CGI プログラムに絶対に必要なことですが、それは、プログラムの中心的なことではありません。C++ for CGI はプログラムを作ることに集中できるようにこのプリプロセス指令を用いて、HTTP応答ヘッダ、HTML文書のヘッダ部分をプログラム本体から切り離して自動的に送信できるようにします。

プログラムを分割した場合、C++ for CGI はすべてのファイルを走査しプリプロセス指令を収集します。プリプロセス指令を無効にする指令はありません。複数の同じ文字列の設定があっても重複して送信することはありませんが、どの設定が有効になるか不定です。したがって、プリプロセス指令は一つのファイルにまとめて記述してください。収集されたプリプロセス指令は、プロジェクトファイルの先頭に、コメントとして記述されます。

C++ for CGI のプリプロセス指令の順番は関係ありません。C++ for CGI が適当に処理します。C/C++ 言語には、例えば、#include , #define など多くのプリプロセス指令があります。C++ for CGI は C/C++ のプリプロセッサーがソースファイルを処理する前にそれを処理します。したがって、#include , #ifdef など C/C++ のプリプロセス指令をいっさい無視します。つまり、#ifdef などで制御できないということです。

プリプロセス指令一覧

プリプロセス指令は #configureを除き、#pragma の後に続けて書きます。プリプロセス指令は行頭から記述され、大文字・小文字を区別します(大文字・小文字を間違えてはいけません)。プリプロセス指令には次のようなものがあります。
指令説明
SET_HEADERHTTP応答ヘッダキューに文字列を追加する
SET_HEADHTML文書ヘッダキューにタグを追加する
COUT_HEADERHTTP応答ヘッダキューの内容を start 関数の前に送信する
COUT_HEADHTTP応答ヘッダキュー、HTML文書ヘッダキューの内容をstart関数の前に送信する
BEGIN_HTMLCOUT_HEADの別名
END_HTMLCGI プログラムが終了する前に </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);