首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACSL是否可以表示任务应该被隐藏?

ACSL是否可以表示任务应该被隐藏?
EN

Stack Overflow用户
提问于 2018-11-19 10:13:50
回答 1查看 52关注 0票数 1

此函数模拟一个函数,该函数返回一个不断上升的值,直到发生溢出。它类似于Arduino中的millis()函数。

为了证明实现,我需要增加(因此,赋值)静态变量,以保持调用之间的状态。但是,调用mock_millis()的函数仍然能够实现assign \nothing

有没有办法让WP忽略赋值条款?

代码语言:javascript
复制
static int64_t milliseconds = 0;

/*@ assigns milliseconds;

    behavior normal:
      assumes milliseconds < INT64_MAX;
      ensures \result == \old(milliseconds) + 1;
      ensures milliseconds == \old(milliseconds) + 1;
    behavior overflow:
      assumes milliseconds == INT64_MAX;
      ensures \result == 0;
      ensures milliseconds == 0;

    complete behaviors normal, overflow;
    disjoint behaviors normal, overflow;
*/
int64_t mock_millis() {
    if (milliseconds < INT64_MAX) {
        milliseconds++;
    } else {
        milliseconds = 0;
    }
    return milliseconds;
}

我试着用ghost变量来做这件事,并且注意到分配ghost变量的函数不能是assigns \nothing。我认为幽灵变量完全独立于程序的实现。有什么特别的原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 15:38:30

我假设您的static变量应该被称为milliseconds,而不是现在的microseconds

关于鬼变量的假设确实是错误的:鬼代码不应该干扰真正的代码,反之亦然(请注意,这一点不是由Frama强制执行的)。因此,如果您将milliseconds声明为ghost,那么对它的任何分配都应该发生在ghost代码中。但从规范的角度来看,这种分配仍然是副作用,需要在assigns条款中提及。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53372397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档