0

Redisソース コードの構造体属性のドット (.) を使用した属性定義の意味が気になります。

    struct config cfg = {
      .tcp = {
        .host = "127.0.0.1",
        .port = 6379
      },
      .unix = {
        .path = "/tmp/redis.sock"
      }
    };

ドットのような属性を定義すると、特別な意味があります.tcp = {...}か?

皆さんありがとう。

4

2 に答える 2

1

structこれは、メンバーの名前付き初期化を行う方法です。

を初期化するデフォルトの方法structでは、メンバーが定義された順序で引数を指定する必要があります。これにより、それを並べ替えることができ、読みやすくなります。structこの構文では、espのいくつかのメンバーのみを初期化することもできます。それらが最初のいくつかでない場合。このページを見てください。

于 2013-08-14T00:55:18.283 に答える
0

…構造体属性のドット(.)を使った属性定義の意味が気になる…

初期化構文を使用して、構造体の特定の要素にアクセスできます{ }。たとえば、次の構造体を考えてみましょう。

struct my_struct {
  int field_1;
  int field_2;
  int field_3;
};

... 次のように初期化できます。

struct my_struct s1 = { 1, 2, 3 };

...または次のように:

struct my_struct s2 = { .field_1 = 1, .field_2 = 2, .field_3 = 3 };

... または、フィールドの順序がわからない場合 (または特定の順序で指定したい場合):

struct my_struct s3 = { .field_3 = 3, .field_1 = 1, .field_2 = 2 };

s1...に相当する発言s2は に相当しs3ます。さらに、初期化でフィールドを指定しないと、ゼロになります。C99 標準 6.7.8.21から:

集合体の要素またはメンバーよりもブレースで囲まれたリスト内の初期化子が少ない場合、または配列内の要素よりも既知のサイズの配列を初期化するために使用される文字列リテラル内の文字が少ない場合、集合体の残りの部分は静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます。

...これを説明するには:

struct my_struct s4 = { .field_1 = 1 };

...これは、フィールド 2 と 3 をゼロで埋めるため、 をs4.field_2 == 0意味しtrueます。

于 2013-08-14T01:26:05.973 に答える