条件コンパイル

C/C++ では, 条件コンパイルをするためにマクロを使っていた.

D では, マクロが全面的に廃止されているので, 条件コンパイルのために特化した別 の機能が用意されている.

version

// main.d
version(HOGE){
  writeln("hoge");
}

> dmd main.d -version=HOGE

-version=HOGE でコンパイルしたときだけ hoge が出力される.

debug

// main.d
debug{
  writeln("debug code");
}

> dmd main.d -debug

-debug 付きでコンパイルしたときだけ debug code が出力される.

static if

static if にコンパイル時定数を渡すと, その値が true か false かによって, コンパイルされるコードを選択することができる.

例えば, 次のように書くと b が true のとき 1 が出力され, false のとき 2 が出力 される:

static if(b){
  writeln("1");
}
else{
  writeln("2");
}

static if はコンパイル時 if 文

static if のブロックは if と違いスコープを作らない

static assert

コンパイル時 assert

Table Of Contents

Previous topic

コンパイル時関数実行 (CTFE)

Next topic

テンプレート制約 (concept if)