Frama c ACSL中访问功能的规范

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

我在指定对内部状态变量的访问时遇到了一个问题,即那些仅由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 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状态变量进行建模,但我不确定这是否是一种合适的方法