条件编译是选择编译以及代码,代码无法编译类似的#if/#其他/#endif在C和C ++中。未在编译的任何声明仍然必须是语法正确。条件编译涉及到条件检查是在编译时计算。就像如果运行条件语句,为,而不是条件编译的功能。以下是D程序专门为条件编译的功能。
debug
version/p>
static if
调试程序开发过程中是非常有用的。标记为调试的表达式和语句被编译成只在调试编译器开关启用程序。
debug a_conditionally_compiled_expression; |
debug |
{ |
// ... conditionally compiled code ... |
} |
else |
{ |
// ... code that is compiled otherwise ... |
} |
else子句是可选的。无论是单个表达式和上面的代码块只有当调试编译器开关启用编译。
而不是完全取消的,该行可以代替被标记为调试。
debug writefln("%s debug only statement", value);
这样的行都包含在仅在调试编译器开关启用程序。
dmd test.d -oftest -w -debug
调试语句可以给出的名称(标签)被列入程序选择性。
debug(mytag) writefln("%s not found", value);
这样的行包含仅在调试编译器开关启用程序。
dmd test.d -oftest -w -debug=mytag
调试块也可以有标签。
debug(mytag) { // }
这是可能的,以使多个调试标记的时间。
dmd test.d -oftest -w -debug=mytag1 -debug=mytag2
有时,调试语句通过数值级别关联是比较有用的。提高级别可以提供更详细的信息。
import std.stdio; |
void myFunction() |
{ |
debug(1) writeln("debug1"); |
debug(2) writeln("debug2"); |
} |
void main() |
{ |
myFunction(); |
} |
$ dmd test.d -oftest -w -debug=1 $ ./test debug1
版本是类似于调试,并用于以相同的方式。else子句是可选的。虽然版本的作品本质上是相同的调试,有单独的关键字可以帮助区分他们无关的用途。与调试,多个版本可以启用。
import std.stdio; |
void myFunction() |
{ |
version(1) writeln("version1"); |
version(2) writeln("version2"); |
} |
void main() |
{ |
myFunction(); |
} |
$ dmd test.d -oftest -w -version=1 $ ./test version1
static if 是编译时相当于if语句中。就像if语句,static if 需要一个逻辑表达式,并计算它。不同的是if语句,static if 不是关于执行流程;更确切地说,它确定一块代码是否应当包括在程序或不包括。
表达是无关的是运算符,我们已经看到在空值和操作是段落,既语法和语义。下表达式是在编译时计算。它产生一个int值,0或1;取决于在括号中指定的表达式。虽然,它需要表达的是不是一个逻辑表达式,该表达式是本身被用作一个编译时逻辑表达式。它是静态的特别有用的,如果条件和模板的约束。
import std.stdio; |
enum Days |
{ |
sun, |
mon, |
tue, |
wed, |
thu, |
fri, |
sat |
}; |
void myFunction(T)(T mytemplate) |
{ |
static if (is (T == class)) |
{ |
writeln("This is a class type"); |
} |
else static if (is (T == enum)) |
{ |
writeln("This is an enum type"); |
} |
} |
void main() |
{ |
Days day; |
myFunction(day); |
} |
This is an enum type