我们确实有静态分支和特征以及另一个合同编程功能。合同之所以很棒,是因为它具有传递正确消息的断言功能。静态检查不会给编译的代码带来任何开销。因此,在编译时提供适当的错误消息的功能自然会非常有帮助。
例如,当一个人试图用我的函数得到一个向量和一个微分 1-form 的叉积时,我可以用断言明确地告诉他关于域的问题,而不是关于编译器如何看待它的结构和数组。或者我可以静态地缩小函数参数类型,但是用户必须处理编译器消息,而不是我的。
所以,问题是:有没有办法在编译时打印自定义消息?
我们确实有静态分支和特征以及另一个合同编程功能。合同之所以很棒,是因为它具有传递正确消息的断言功能。静态检查不会给编译的代码带来任何开销。因此,在编译时提供适当的错误消息的功能自然会非常有帮助。
例如,当一个人试图用我的函数得到一个向量和一个微分 1-form 的叉积时,我可以用断言明确地告诉他关于域的问题,而不是关于编译器如何看待它的结构和数组。或者我可以静态地缩小函数参数类型,但是用户必须处理编译器消息,而不是我的。
所以,问题是:有没有办法在编译时打印自定义消息?
是的,您可以使用多种方式发出自定义消息:
pragma(msg, message)
message
将在编译期间评估表达式并打印结果。static assert(expression, message)
expression
当在编译时评估的 为假时,将导致编译中止。这是 C#error
预处理器指令的 D 等效项。deprecated
可以有解释消息。ctfeWriteln
被提议作为writeln
在 CTFE 解释期间工作的变体。