发布于 2015-08-16 14:51:20 | 236 次阅读 | 评论: 0 | 来源: 网络整理
条件编译是选择编译以及代码,代码无法编译类似的#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