【发布时间】:2015-08-04 18:25:55
【问题描述】:
我安装了 Frama-C Sodium (20150201) + Jessie 插件,并试图重现 ACSL 参考手册中提供的示例。但我不能使用 Jessie 库函数(如 \strlen),因为每次使用其中一个时,都会出现以下错误:
[kernel] user error: unbound function \strlen in annotation.
这是代码:
/*@
requires \base_addr(src) != \base_addr(dest);
requires \strlen(src) >= 0;
*/
char *strcpy ( char * dest , const char * src );
从 bash 启动 frama-c(使用 -jessie 选项)无效。
【问题讨论】:
-
不应该是
char *strcpy()吗?该函数返回您为*dest传递的指针。 -
@Olaf: \strlen 在此上下文中用于检查 src 是否指向有效的 C 字符串。是的,它返回一个字符 *。错字已修复。
-
所以不是同名的C函数?使用同一个名字很烦人。
-
了解 \strlen 如何检查有效的 C 字符串会很有趣,它的唯一参数是指针。
-
@WeatherVane 在 ACSL 中的逻辑函数不需要是可计算的。如果您放弃此要求,则很容易使用
\forall量化指针参数后的所有字符来编写\strlen的定义。