可能无限C函数的ACSL规范

时间:2013-02-21 09:42:53

标签: frama-c language-specifications acsl

我试图指定外部函数的行为,更准确地说,它们的终止。 ACSL文档说明\terminates p;属性指定如果谓词p成立,则保证函数终止,但在p不成立时指定任何内容。它还解释了永远不会返回的函数可以通过以下方式指定:

//@ ensures \false ; terminates \false ;

此外,ACSL提供了一个属性\exits p;来指定突发终止时的后置条件。所以我想知道是否:

//@ ensures \false ; exits \false; terminates \false ;

会指定函数永远循环吗?

此外,规范是什么:

//@ ensures p ; exits q; terminates \false ;

意味着可能的无限循环?

1 个答案:

答案 0 :(得分:1)

你的规范是最接近的,可以说是一个函数永远循环,但我仍然看到两个角落的情况:

  1. 运行时错误:您可以随时说其他地方(WP + genassignsValue
  2. longjmp :我担心ACSL目前没有任何内容可以指定类似的内容。