Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Static analysis 函数调用在一个";如果;ACSL第条_Static Analysis_Frama C - Fatal编程技术网

Static analysis 函数调用在一个";如果;ACSL第条

Static analysis 函数调用在一个";如果;ACSL第条,static-analysis,frama-c,Static Analysis,Frama C,考虑以下代码 int f(int a, int b){ return 0; } /*@ ensures (f(2,3)== 0) ==> \result == 2; */ int g() { if (f(2,3) == 0) return 2; return 0; } frama-c对以下代码的响应为以下错误 [kernel:annot-error] fing.c:5: Warning: unbound function f. Ignoring logic

考虑以下代码

int f(int a, int b){
  return 0;
}
/*@
  ensures (f(2,3)== 0) ==> \result == 2;
*/
int g() {
  if (f(2,3) == 0)
    return 2;
  return 0;
}
frama-c对以下代码的响应为以下错误

[kernel:annot-error] fing.c:5: Warning: 
  unbound function f. Ignoring logic specification of function g
[kernel] User Error: warning annot-error treated as fatal error.
[kernel] User Error: stopping on file "fing.c" that has errors. Add '-kernel-msg-key pp'
  for preprocessing command.
[kernel] Frama-C aborted: invalid user input.

有没有一种方法可以编写一个规范,其中在“if”子句中调用函数?

在ACSL中,不能在规范中使用C函数。如果你想做这样的事情,唯一的可能就是定义一个与C函数等价的逻辑函数(理想情况下是可证明的)并使用这个逻辑函数

/*@ logic integer l_f(integer a, integer b) = 0 ; */

//@ ensures \result == l_f(a, b);
int f(int a, int b){
  return 0;
}
/*@
  ensures (l_f(2,3)== 0) ==> \result == 2;
*/
int g() {
  if (f(2,3) == 0)
    return 2;
  return 0;
}