Frama c ACSL中访问功能的规范
我在指定对内部状态变量的访问时遇到了一个问题,即那些仅由getter和setter访问的模块的本地状态变量。我曾尝试在setter函数的函数契约规范中使用getter函数,但frama-c返回一个错误:Frama c ACSL中访问功能的规范,frama-c,Frama C,我在指定对内部状态变量的访问时遇到了一个问题,即那些仅由getter和setter访问的模块的本地状态变量。我曾尝试在setter函数的函数契约规范中使用getter函数,但frama-c返回一个错误: > frama-c -wp -wp-rte -verbose 0 intstate.c intstate.h ... intstate.h:4:[kernel] user error: unexpected token ')' [kernel] user error: skipping f
> frama-c -wp -wp-rte -verbose 0 intstate.c intstate.h
...
intstate.h:4:[kernel] user error: unexpected token ')'
[kernel] user error: skipping file "intstate.c" that has errors.
[kernel] Frama-C aborted: invalid user input.
以下是标题:
int get_state(void);
/*@
@ ensures val == get_state();
@*/
void set_state(int val);
来源如下:
#include "intstate.h"
static int the_state = 0;
int get_state(void) {
return the_state;
}
void set_state(int val) {
the_state = val;
}
我认为这是一个普遍的问题。在ACSL中是如何实现的?有人有类似问题的例子吗
我使用Frama-C氟-20130601
提前谢谢
坦率的
编辑:
重新仔细阅读ACSL规范,我发现规范中不可能使用C函数,只能使用逻辑函数。我试图用逻辑函数包装C函数,但也没有被接受,同样的错误消息。我最终通过一个ghost变量对interanl状态变量进行建模,但我不确定这是否是一种合适的方法