8

もう一方には、コントラクト プログラミング機能と共に、静的分岐とトレイトがあります。適切なメッセージを配信するアサート機能があるため、コントラクトは優れています。また、静的チェックは、コンパイルされたコードにオーバーヘッドをもたらしません。したがって、当然ながら、コンパイル時に適切なエラー メッセージを表示する機能があれば非常に便利です。

たとえば、関数でベクトルの外積と微分 1 形式を取得しようとすると、アサーションを使用して、コンパイラが構造の観点からそれをどのように見ているかではなく、ドメインの観点から問題について具体的に伝えることができます。および配列。または、関数の引数の型を静的に絞り込むこともできますが、ユーザーは私のものではなく、コンパイラ メッセージを処理する必要があります。

問題は、コンパイル時にカスタム メッセージを出力する方法はあるのかということです。

4

1 に答える 1

9

はい、いくつかの方法でカスタム メッセージを送信できます。

  1. pragma(msg, message)式を評価し、messageコンパイル中に結果を出力します。
  2. static assert(expression, message)expressionコンパイル時に評価される が false の場合、コンパイルが中止されます。これは、C#errorプリプロセッサ ディレクティブに相当する D です。
  3. CTFE (コンパイル時関数実行) 中、キャッチされない例外とアサートの失敗はコンパイル時エラーとして機能し、添付メッセージも出力します。
  4. deprecatedキーワードに説明メッセージを含めることができるようになりました。
  5. 現在、CTFE 解釈中に評価された式を出力する方法はありませんが、CTFE 解釈中に機能するバリアントctfeWritelnとして提案されています。writeln
于 2013-10-29T06:30:04.430 に答える