Solaris 動的トレースガイド

インライン

D の名前付き定数は、inline 指令を使って定義することもできます。この指令を使用すると、より一般的な方法で、コンパイル時に事前に定義された値や式で置き換えられる識別子を作成できます。インライン指令は、C プリプロセッサで使用される #define 指令よりも効果的な文字列置換形式です。これは、インライン指令では置換に実際の型が割り当てられ、単なる構文素ではなくコンパイル済み構文ツリーを使って置換できるからです。インライン指令は、次の形式の宣言を使って指定します。

inline type name = expression ;

type は既存の型の型定義、name は以前にインライン変数または大域変数として定義されていない任意の有効な D 識別子、expression は任意の有効な D 式です。インライン指令の処理が完了すると、D コンパイラにより、プログラムソース内の後続の各 name インスタンスが、コンパイル済みの expression で置き換えられます。たとえば、次の D プログラムでは、文字列 "hello" と整数値 123 がトレースされます。

inline string hello = "hello";
inline int number = 100 + 23;

BEGIN
{
	trace(hello);
	trace(number);
}

インライン名は、対応する型の大域変数と同じように使用できます。コンパイル時に、インライン式が整数定数または文字列定数に入れられた場合、スカラー配列サイズなど、定数式を必要とする状況でもインライン名を使用できます。

インライン指令の評価時には、インライン式の構文エラーのチェックも行われます。式の結果の型は、D 代入演算子 (=) と同じ規則に従って、インラインで定義された型と互換性のある型でなければなりません。インライン式でインライン識別子そのものを参照することはできません。 再帰的定義は禁じられています。

DTrace ソフトウェアパッケージは、システムディレクトリ /usr/lib/dtrace に多数の D ソースファイルをインストールします。このディレクトリには、D プログラム内で使用できるインライン指令が格納されています。たとえば、signal.d ライブラリには、次のような指令が格納されています。

inline int SIGHUP = 1;
inline int SIGINT = 2;
inline int SIGQUIT = 3;
...

これらのインライン定義を使用すると、signal(3HEAD) のマニュアルページに記載されている最新の Solaris のシグナル名群にアクセスできます。同様に、errno.d ライブラリには、Intro(2) のマニュアルページに記載されている C の errno 定数のインライン指令が格納されています。

デフォルトでは、D コンパイラには、提供されているすべての D ライブラリファイルが自動的に格納されます。そのため、これらの定義はすべての D プログラムで使用できます。