8.2.4 プリプロセサ宣言文の有効化
(1) 概要
プリプロセサでは,オプションでCコンパイラのプリプロセサ宣言文を使用できるようにしています。
/Eオプション(UNIX版の場合は-Eオプション)を指定した場合,プリプロセサでは次の機能を実行できます。
-
#define宣言文を使用した定数及びマクロの定義
-
#include文で引き込んだインクルードファイル内の定数及びマクロの定義※
-
#ifdef文,#ifなどの条件付きコンパイル
-
埋込み変数宣言時のマクロでの定数指定
- 注※
-
SQL文,及びSQL TYPE IS 型の変数宣言は,インクルードファイルの中には記述できません(プリプロセサは,ヘッダのポストソースは生成しないため,コンパイル時にエラーとなります)。詳細は,「SQLの記述規則」の23.を参照してください。
(2) 使用例
(a) 定数の使用
UAPソースファイル中で,次の埋込み変数宣言が記述されているとします。
#include “user.h” EXEC SQL BEGIN DECLARE SECTION; char xchar1[MAX_CHAR_LEN]; EXEC SQL END DECLARE SECTION;
UAPがインクルードしているヘッダファイル(user.h)の中で,次のような定数が定義されているとします。
#define MAX_CHAR_LEN 256
プリプロセサは,インクルードファイルを読み込み,MAX_CHAR_LENの定義値を使用して,埋込み変数宣言を「char xchar1[256];」に変換してから解析します。ただし,マクロ定数は,SQL先頭子とSQL終了子の間(SQL文中) には使用できません。
インクルードファイルを検索するためのディレクトリパスは,オプションの引数として指定します。Cコンパイラのデフォルトのディレクトリは指定する必要はありません。
(b) 条件付きコンパイル
#ifdefなどを使用して,プリプロセスするSQL文を選択できます。例を次に示します。
#ifdef DEF_SWITCH EXEC SQL DECLARE CUR1 CURSOR FOR SELECT * FROM TABLE1; #else EXEC SQL DECLARE CUR1 CURSOR FOR SELECT * FROM TABLE2; #endif
ただし,Cコンパイラのプリプロセサ宣言文は,SQL先頭子とSQL終了子の間(SQL文中)には記述できません。