Compiler errors D中是否有一种静态打印?

Compiler errors D中是否有一种静态打印?,compiler-errors,d,compiler-warnings,Compiler Errors,D,Compiler Warnings,我们有静态分支和特性,另一方面还有契约编程特性。契约之所以伟大,是因为它具有传递正确消息的断言特性。静态检查不会给编译代码带来任何开销。因此,拥有一个在编译时提供适当错误消息的特性自然会非常有帮助 例如,当一个人试图用我的函数得到向量和微分1-形式的叉积时,我可以用断言明确地告诉他关于域的问题,而不是编译器如何看待结构和数组的问题。或者我可以静态地缩小函数参数类型的范围,但是用户必须处理编译器消息,而不是我的 因此,问题是:是否有某种方法可以在编译时打印自定义消息?是的,您可以使用以下几种方法发

我们有静态分支和特性,另一方面还有契约编程特性。契约之所以伟大,是因为它具有传递正确消息的断言特性。静态检查不会给编译代码带来任何开销。因此,拥有一个在编译时提供适当错误消息的特性自然会非常有帮助

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


因此,问题是:是否有某种方法可以在编译时打印自定义消息?

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

  • pragma(msg,message)
    将计算
    消息
    表达式,并在编译期间打印结果
  • 静态断言(表达式,消息)
    将在编译时计算的
    表达式
    为false时导致编译中止。这是C
    #error
    预处理器指令的D等价物
  • 在CTFE(编译时函数执行)期间,未捕获的异常和断言失败将作为编译时错误,并发出附加的消息
  • 已弃用的
    关键字现在可以有解释消息
  • 虽然
    ctfeWriteln
    被建议作为
    writeln
    变量,在CTFE解释期间工作,但目前无法在CTFE解释期间打印已计算的表达式