9 Nisan 2018 Pazartesi

Anonymous Structure

Giriş
Bu özellik C dilinde var. C++dilinde bu özellik yok. Açıklaması şöyle
An unnamed member whose type specifier is a structure specifier with no tag is called an anonymous structure; an unnamed member whose type specifier is a union specifier with no tag is called an anonymous union. The members of an anonymous structure or union are considered to be members of the containing structure or union. This applies recursively if the containing structure or union is also anonymous.
Bir yapının içinde anonymous (anonim) bir başka yapı varsa, içerdeki yapının alanlarına direkt erişimi mümkün. Normalde b.foo.x. şeklinde yazmamız gerekirken şöyle yaparız.
typedef struct { int x; } foo;
typedef struct { foo; } bar;

int main(void)
{
  bar b;
  b.x = 1;
  printf("%d\n", b.x);
}
Anonymouse Structure Union İçindeyse, Union'a Dahil Edilir
Açıklaması şöyle.
An unnamed member whose type specifier is a structure specifier with no tag is called an anonymous structure; an unnamed member whose type specifier is a union specifier with no tag is called an anonymous union. The members of an anonymous structure or union are considered to be members of the containing structure or union. This applies recursively if the containing structure or union is also anonymous.
Şu kod derlenmez.
union A {
  struct {
    int a:1;
    int b:2;
    int c1:29;
  }PACKED;
  struct {
    int a:1;
    int b:2;
    int c2:28;
    int d:1;
  }PACKED;
  int val;
}PACKED;
Çünkü şöyle derlenir.
union A
{
  int a:1;
  int b:2;
  int c1:29;

  int a:1;
  int b:2;
  int c2:28;
  int d:1;

  int val;
};


Hiç yorum yok:

Yorum Gönder