0

アイテムの配列を静的に初期化する方法を見つけたので、より複雑な構造が必要で、値として char* の代わりに構造体 (atom_s という名前) が必要です。

typdef struct atom_s {
  const char *val;
  const char *filter;
} atom_t;

struct
{
  const char *key;
  const atom_t **values;
} key_to_values[] =
{
  { .key = "foo", .values = (const atom_t *[]) { NULL } },
  { .key = "bar", .values = (const atom_t *[]) { { .val = "foo", .filter = "bar" }, NULL } },
};

問題は、上記の配列宣言内でatom_sを初期化する方法がわからない、またはそれが可能かどうかさえわからないことです。配列の 2 行目 (key = "bar") はコンパイルされません。

warning: braces around scalar initializer  
warning: (near initialization for '(anonymous)[0]')
error: field name not in record or union initializer
4

1 に答える 1

1
{ 
   .key = "bar", 
   .values = (const atom_t *[]) {
       (const atom_t []) {
           { .val = "foo", .filter = "bar" }
           // how is the user going to know this array has one element?
       },
       NULL 
   }
},

valuesが指す配列の各要素は、の配列を指しatom_tます (null である最後の要素を除く)。常に同じ長さでない限り、これらの内部配列のそれぞれを終了する何らかの方法が必要になる場合もあります。

于 2012-11-02T09:28:10.410 に答える