关于frama-c中数组的要求

时间:2014-05-07 06:42:22

标签: frama-c

在frama-c中编写函数的ACSL时,我希望全局变量数组满足要求,例如:

int a[5];

/*@requires \forall int i; 0 <= i <= 4 ==> a[i] > 0;
*/
void f()
{
    do something with a...;
}

我想要大于0的所有元素,那是对的吗?我试试,那不起作用,谁能告诉我怎么写呢?

非常感谢。

1 个答案:

答案 0 :(得分:2)

正如其manual中所解释的,Value Analysis插件只能理解ACSL公式的一个子集。

特别是,它不处理量词,因此您的前置条件对结果状态没有影响。通常的诀窍是 编写一个包装函数,在适当的环境中调用f。为此,您可以特别使用Frama_C_interval函数。例如,由于#include <limits.h>

,您的包装可能是(不要忘记文件中的INT_MAX
void wrap() {
  for(int i=0; i<=4; i++) a[i] = Frama_C_interval(1,INT_MAX);
  f();
}

你可以用这种方式打电话给Frama-C:

frama-c -val -main wrap -lib-entry file.c