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

  • bobinire

    bobinire

    24 EYLÜL 2006
  • Louis C.K.

    Louis C.K.

    18 HAZİRAN 2006
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011