8

我们确实有静态分支和特征以及另一个合同编程功能。合同之所以很棒,是因为它具有传递正确消息的断言功能。静态检查不会给编译的代码带来任何开销。因此,在编译时提供适当的错误消息的功能自然会非常有帮助。

例如,当一个人试图用我的函数得到一个向量和一个微分 1-form 的叉积时,我可以用断言明确地告诉他关于域的问题,而不是关于编译器如何看待它的结构和数组。或者我可以静态地缩小函数参数类型,但是用户必须处理编译器消息,而不是我的。

所以,问题是:有没有办法在编译时打印自定义消息?

4

1 回答 1

9

是的,您可以使用多种方式发出自定义消息:

  1. pragma(msg, message)message将在编译期间评估表达式并打印结果。
  2. static assert(expression, message)expression当在编译时评估的 为假时,将导致编译中止。这是 C#error预处理器指令的 D 等效项。
  3. 在 CTFE(编译时函数执行)期间,未捕获的异常和断言失败将作为编译时错误,并发出附加消息。
  4. 关键字现在deprecated可以有解释消息。
  5. 目前没有办法在 CTFE 解释期间打印评估的表达式,尽管ctfeWriteln被提议作为writeln在 CTFE 解释期间工作的变体。
于 2013-10-29T06:30:04.430 回答