在frama-c中编写函数的ACSL时,我希望全局变量数组满足要求,例如:
int a[5];
/*@requires \forall int i; 0 <= i <= 4 ==> a[i] > 0;
*/
void f()
{
do something with a...;
}
我想要大于0的所有元素,那是对的吗?我试试,那不起作用,谁能告诉我怎么写呢?
非常感谢。
答案 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