SORU
31 EKİM 2008, Cuma


Neden C Sendikalara ihtiyacımız var mı?

Sendikalar ne zaman kullanılmalıdır? Neden onlara ihtiyacımız var?

CEVAP
31 EKİM 2008, Cuma


Sendikalar genellikle ikili temsili tamsayılar ve yüzen arasında dönüştürmek için kullanılır:

union
{
  int i;
  float f;
} u;

// Convert floating-point bits to integer:
u.f = 3.14159f;
printf("As integer: x\n", u.i);

Ancak bu teknik olarak tanımsız davranışlara göre C standart (sadece sözde okuma alanına en yakın zamanda yazılmış), davranacaktır, iyi tanımlanmış bir şekilde hemen hemen herhangi bir derleyici.

Sendikalar da bazen sözde polimorfizmi uygulamak için C, bir yapı, etiketi ne içerdiğini gösteren vererek, ve sonra mümkün olan türleri bir araya unioning tarafından kullanılır

enum Type { INTS, FLOATS, DOUBLE };
struct S
{
  Type s_type;
  union
  {
    int s_ints[2];
    float s_floats[2];
    double s_double;
  };
};

void do_something(struct S *s)
{
  switch(s->s_type)
  {
    case INTS:  // do something with s->s_ints
      break;

    case FLOATS:  // do something with s->s_floats
      break;

    case DOUBLE:  // do something with s->s_double
      break;
  }
}

Bu struct S boyutu sadece 12 bayt yerine 28 olmasını sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007
  • EEVblog

    EEVblog

    4 NİSAN 2009
  • FOSDEM

    FOSDEM

    13 Ocak 2009