C言語の構造体(共用体)キャストの勉強
C言語でデータを抽象化する場合には、どうすれば良いか困ったので、
試してみました。※ レベルとしては、初級〜中級くらいだと思いますが 。。。
試したのは以下のキャスト
- サブクラスに相当する構造体(Sub) =>スーパークラスに相当する構造体(Super)
- 共用体メンバ(Sub) => 共用体(UnionData)
// test.c #include <stdio.h> // スーパークラス typedef struct { int a; } Super; // サブクラス typedef struct { Super super; int b; } Sub; // 共用体 typedef union { Super super; Sub sub; } UnionData; // メイン関数 int main(void) { Super* super; // スーパークラス Sub sub; // サブクラス UnionData* data; // 共用体 // 初期化 sub.super.a = 1; sub.b = 2; // サブクラス => スーパークラス へのキャスト super = (Super*) ⊂ printf("super.a = %d\n", super->a); // 共用体メンバ => 共用体へのキャスト data = (UnionData*) ⊂ printf("union.sub.b = %d\n", data->sub.b); return 0; }
以下の通り実行しました。
Warningも出ることなく、うまくいったようです。
はじめは、構造体(共用体)の実体をキャストしようとしてうまくいかなかったのですが、
実体ではなく、ポインタでやるといいようです。 (仕組みは良くわかっていませんが。。。)
shell$ gcc test.c -Wall
shell$ ./a.out
super.a = 1
union.sub.b = 2