C/C++ では, 条件コンパイルをするためにマクロを使っていた.
D では, マクロが全面的に廃止されているので, 条件コンパイルのために特化した別 の機能が用意されている.
// main.d
version(HOGE){
writeln("hoge");
}
> dmd main.d -version=HOGE
-version=HOGE でコンパイルしたときだけ hoge が出力される.
// main.d
debug{
writeln("debug code");
}
> dmd main.d -debug
-debug 付きでコンパイルしたときだけ debug code が出力される.
static if にコンパイル時定数を渡すと, その値が true か false かによって, コンパイルされるコードを選択することができる.
例えば, 次のように書くと b が true のとき 1 が出力され, false のとき 2 が出力 される:
static if(b){
writeln("1");
}
else{
writeln("2");
}
static if はコンパイル時 if 文
static if のブロックは if と違いスコープを作らない
コンパイル時 assert