位置:首页 > 高级语言 > D语言在线教程 > D语言条件编译

D语言条件编译

条件编译:

条件编译是选择编译以及代码,代码无法编译类似的#if/#其他/#endif在C和C ++中。未在编译的任何声明仍然必须是语法正确。条件编译涉及到条件检查是在编译时计算。就像如果运行条件语句,为,而不是条件编译的功能。以下是D程序专门为条件编译的功能。

  • debug

  • version/p>

  • static if

debug

调试程序开发过程中是非常有用的。标记为调试的表达式和语句被编译成只在调试编译器开关启用程序。

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(tag)

调试语句可以给出的名称(标签)被列入程序选择性。

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

debug(level)

有时,调试语句通过数值级别关联是比较有用的。提高级别可以提供更详细的信息。

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

version(tag)and version(level)

版本是类似于调试,并用于以相同的方式。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

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