我必须设计一个抽象数据类型,但我不允许使用动态分配。好像有点棘手……
我目前拥有的:
在 adt.c 中:
struct adt
{
bool b;
};
const size_t adtSize = sizeof( struct adt );
// Initialisation of the adt
void Adt_New( struct adt* anAdt, bool b )
{
// No calloc allowed...
anAdt->b = b;
}
在 adt.h 中,丑陋的部分来了:
struct adt; // adt structure
extern const size_t adtSize;
// Bear with me...
#define ADT_DATA( NAME ) uint8_t NAME ## _storage[ adtSize ]; \
memset( &NAME ## _storage , 0 , adtSize ); \
struct adt* NAME = (adt*) & NAME ## _storage;
现在我可以像这样使用它:
void TestAdt()
{
ADT_DATA( a );
Adt_New( a, true );
}
在专业方面,我有一个不透明的数据类型,我不必使用动态分配。
不利的一面,这只是丑陋的。当我尝试不在函数内(例如全局)调用 ADT_DATA( ... ) 时,我收到一条错误消息。
有可能改善这一点吗?目前,我唯一的选择是公开数据类型......
TIA 为您的想法!