私が使用している 2 つの構造体があり、それらはほぼ同一に定義されています。これらは、変更できないヘッダー ファイルで定義されています。
typedef struct
{
uint32_t property1;
uint32_t property2;
} CarV1;
typedef struct
{
uint32_t property1;
uint32_t property2;
/* V2 specific properties */
uint32_t property3;
uint32_t property4;
} CarV2;
私のコードでは、すべてのベースをカバーするために、ファイルの先頭で V2 構造体を初期化します。
static const carV2 my_car = {
.property1 = value,
.property2 = value,
/* V2 specific properties */
.property3 = value,
.property4 = value
};
後で、初期化した値を取得し、それらを構造体にコピーして、void ポインターを介して関数から返されるようにしたいと考えています。車の V2 プロパティが必要な場合もあれば、V1 プロパティが必要な場合もあります。定義/初期化を重複させずに安全に memcpy するにはどうすればよいですか? 私は C にかなり慣れていないので、これは見苦しく、このコードを見てエンジニアが私をフォローすることは承認されないことを理解しています。これを行うためのきれいな方法は何ですか?
int get_properties(void *returned_car){
int version = get_version();
switch (version){
case V1:
{
CarV1 *car = returned_car;
memcpy(car, &my_car, sizeof(CarV1)); // is this safe? What's a better way?
}
case V2:
{
CarV2 *car = returned_car;
memcpy(car, &my_car, sizeof(CarV2));
}
}
}