ACSL中的访问功能规范

时间:2014-03-13 16:16:11

标签: 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 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 Fluorine-20130601。

提前致谢

修改 重新阅读ACSL规范更密切地向我透露,C函数在规范中是不可能的,只有逻辑函数。我试图将C函数包装在一个逻辑函数中但是也没有被接受,同样的错误信息。我最终通过ghost变量对interanl状态变量建模,但我不确定这是不是很好的方法。

0 个答案:

没有答案