在一个示例中,我跨过一行代码,我不明白它是如何被利用的以及使用这种类型的声明有什么好处。 接下来是从该示例中提取的部分代码
const uint16_t cycles = 8;
typedef uint8_t invariant(value < cycles) TIndex_t;
struct TData
{
uint16_t readings[cycles];
volatile uint16_t sum;
TIndex_t index;
void addReading(uint16_t arg)
writes(*this; volatile)
pre(invar())
pre(arg <= 1023)
post(invar())
{
sum = sum - readings[index] + arg;
readings[index] = arg;
index = static_cast<TIndex_t>((index + 1u) % cycles);
}
void init()
writes(*this; volatile)
post(invar());
ghost(
bool invar() const
returns((forall r in readings :- r <= 1023) && sum == + over readings);
)
这是GNU C ++,我可以说struct是一种类定义
答案 0 :(得分:1)
这不是纯C ++。
似乎有人编写了编译器扩展或一系列宏,以允许指定代码块的前置条件和后置条件。
您将不得不问那个人。
(顺便说一句,这就是为什么仅“提取代码”通常不足以理解的原因;您需要观察整个上下文来了解发生了什么。在这种情况下,内容包括在其他地方找到但未包含在您的问题中的定义和/或文档。)