抽象データ型を設計する必要がありますが、動的割り当てを使用できません。少しトリッキーなようです...
私が現在持っているもの:
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!