带不变typedef和正常typedef的typedef

时间:2018-11-13 11:44:46

标签: c++ gnu avr atmel

在一个示例中,我跨过一行代码,我不明白它是如何被利用的以及使用这种类型的声明有什么好处。 接下来是从该示例中提取的部分代码

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是一种类定义

1 个答案:

答案 0 :(得分:1)

这不是纯C ++。

似乎有人编写了编译器扩展或一系列宏,以允许指定代码块的前置条件和后置条件。

您将不得不问那个人。

(顺便说一句,这就是为什么仅“提取代码”通常不足以理解的原因;您需要观察整个上下文来了解发生了什么。在这种情况下,内容包括在其他地方找到但未包含在您的问题中的定义和/或文档。)