2013-10-29 80 views
7

我們確實擁有靜態分支和特徵以及合約編程功能。由於交付正確信息的主張功能,合同非常好。靜態檢查不會給編譯代碼帶來任何開銷。所以很自然地,在編譯時提供給出正確的錯誤消息的功能會非常有幫助。例如,當我試圖用我的函數得到一個向量和一個差分1-形式的交叉乘積時,我可以用斷言來具體地告訴他關於這個問題的問題,而不是關於編譯器如何看待它的問題在結構和陣列方面。或者我可以靜態縮小函數參數類型,但用戶將不得不處理編譯器消息,而不是我的。D中是否有靜態打印?

所以,問題是:有沒有辦法在編譯時打印自定義消息?

回答

9

是的,你可以用幾種方式發出自定義消息:

  1. pragma(msg, message)將評估message表達和編譯過程中打印出結果。
  2. static assert(expression, message)將在編譯時計算出的expression爲假時導致編譯中止。這是C #error預處理器指令的D等效項。
  3. 在CTFE(編譯時函數執行)期間,未捕獲到的異常和斷言失敗將作爲編譯時錯誤,併發出附加消息。
  4. deprecated關鍵字現在可以有解釋消息。
  5. 目前沒有辦法在CTFE解釋期間打印評估表達式,儘管ctfeWriteln被提議爲在CTFE解釋期間起作用的writeln變體。