位置:首頁 > 高級語言 > 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