我试图指定外部函数的行为,更准确地说,它们的终止。ACSL 文档说该\terminates p;
属性指定如果谓词p
成立,则保证函数终止,但在p
不成立时不指定任何内容。它还解释了一个永远不会返回的函数可以通过以下方式指定:
//@ ensures \false ; terminates \false ;
此外,ACSL 提供了一个属性\exits p;
来指定在突然终止的情况下的后置条件。所以我想知道是否:
//@ ensures \false ; exits \false; terminates \false ;
会指定函数总是永远循环吗?
此外,规范是什么:
//@ ensures p ; exits q; terminates \false ;
意味着关于可能的无限循环?