D中有静电打印吗?

aka*_*nuk 7 d compiler-errors compiler-warnings

我们确实有静态分支和特征以及合同编程功能.由于提供正确信息的断言功能,合同很棒.静态检查不会给编译的代码带来任何开销.因此,在编译时提供适当的错误消息的功能自然会非常有用.

例如,当一个人尝试使用我的函数得到一个向量和一个差分1-form的交叉乘积时,使用断言我可以专门告诉他关于域的问题,而不是关于编译器如何在结构方面看到它和数组.或者我可以静态缩小函数参数类型,但用户必须处理编译器消息,而不是我的.

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

Vla*_*eev 9

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

  1. pragma(msg, message)将评估message表达式并在编译期间打印结果.
  2. static assert(expression, message)expression在编译时评估的错误将导致编译中止.这是C #error预处理器指令的D等价物.
  3. 在CTFE(编译时功能执行)期间,未捕获的异常和断言失败将充当编译时错误,并发出附加消息.
  4. deprecated关键字现在可以有一个解释的消息.
  5. 目前没有办法在CTFE解释期间打印评估表达式,尽管ctfeWriteln建议作为writeln在CTFE解释期间起作用的变体.