プレーンCには優れた機能があります-void型ポインター。これは、任意のデータ型へのポインターとして使用できます。
ただし、次の構造体があると仮定します。
struct token {
int type;
void *value;
};
値フィールドは、char 配列、int、またはその他のものを指す場合があります。
したがって、この構造体の新しいインスタンスを割り当てるときは、次のものが必要です。
1) この構造体にメモリを割り当てます。
2) 値にメモリを割り当て、それを値フィールドに割り当てます。
私の質問は、void ポインターのような別の型にキャストできる「void 型の配列」を宣言する方法はありますか?
私が望むのは、任意の型にキャストできる「柔軟なメンバー配列」(C99 標準の 6.7.2.1 で説明) を使用することだけです。
このようなもの:
struct token {
int type;
void value[];
};
struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;
token->value を char または int 配列として宣言し、後で必要な型にキャストするとこの作業が行われると思いますが、後でこのコードを読む人にとっては非常に混乱する可能性があります。