今回は、処理の前に分岐するディレクティブを紹介します。 処理中での分岐ではなく、処理の前に分岐…? 分岐も処理なのでは?という問いが聞こえてきそうですが、 前章と同じく、ココでの前処理というのはプリプロセス、コンパイル前に行う処理。 コンパイル実行前に分岐するということは即ち、コンパイル自体を制御するということです。 初めに、分岐を行うif命令にプリプロセス接頭辞#を付けた命令と、 switch命令に対するswend命令のように、始端と終端を対にして使う必要があるので併せて紹介します。
| #if 定数 | |||
| 定数 | 分岐対象とする定数値、または定数式を指定する。 | ||
| #endif | |||
| [パラメータなし] | 終端を示すだけのため、パラメータは必要ない。 | ||
| マクロ名 | マクロ内容 |
|---|---|
| _debug | デバッグモード時 |
| __hsp30__ | HSP3.0以降使用時 |
| __file__ | 使用時点で解析されているファイル名 |
| __line__ | 使用時点で解析されている行番号 |
| __date__ | 使用時点の日付 |
| __time__ | 使用時点の時刻 |
| __hspver__ | HSPバージョン番号 |
| #else | |||
| [パラメータなし] | 「真」以外を示すだけのため、パラメータは必要ない。 | ||
1 2 3 4 5 6 7 8 9 |
ver = __hspver__ // 上位8ビット:メジャー 下位8ビット:マイナー #if __hspver__ >= 0x3000 // 上記のverは変数なので指定できない mes "バージョン=" + strf("%x", ver) // HSP2.Xには存在しないがエラーにはならない #else str ver, 16 // HSP3.0から関数だが、エラーにはならない mes "バージョン=" + ver stop #endif |
| #ifdef マクロ定数 | |||
| マクロ定数 | 対象とするマクロ定数名を指定する。 | ||
1 2 3 4 5 |
#ifdef _debug mes "現在デバッグで実行しています。" #else mes "実行ファイルにして実行しています。" #endif |
| #ifndef マクロ定数 | |||
| マクロ定数 | 対象とするマクロ定数名を指定する。 | ||
1 2 3 4 5 |
#ifndef _debug mes "実行ファイルにして実行しています。" #else mes "現在デバッグで実行しています。" #endif |