SORU
11 Temmuz 2009, CUMARTESİ


== Boyutu(numaralama) boyutu(int), her zaman?

== Boyutu(numaralama) boyutu(int), her zaman ?

  • Yoksa derleyici bağımlı mı?
  • Yanlış derleyici kelime uzunlukları (bellek) uyum için iyileştirilmiş olarak söylemek y int yani belirli bir derleyici üzerinde kelime boyutu nedir? Word hizalı olarak çeteleler kullanırsam işlemenin cezası yok anlamına mı geliyor?
  • Dönüş türleri kontrol ederken eğer ben açıkça değerleri hakkında endişe etme gibi bir numaralama tüm dönüş kodları koyarsanız daha iyi olur, sadece isimler değil. Eğer bu durum alışkanlık ise #bellek kurtarmak gibi daha iyi TANIMLAR.

Her zamanki uygulama nedir? Bir ağ üzerinde bu dönüş türleri taşıma ve işleme diğer ucunda yapılmalı, çeteleler tercih ne olurdu/#tanımlar/ sabit değer vermez.

Derleyici makrolar, sembolik link, insanların nasıl daha sonra hata ayıklama, üstbilgi dosyası tamsayı değeri karşılaştırılır? yok - net üzerinde Sadece kontrol DÜZENLEMEK,

—Açıklamalar— ihtiyacım var . aşağıda, bu satır ekleme am Yanıtları

"Uygulama tanımlı ve boyutu(numaralama)olabilireşit boyutu(char), yani 1."

  • Bu derleyici çeteleler değerleri aralığını kontrol eder demek değil, ve sonra bellek atayın. Tabii ki bilmiyorum, ben öyle düşünmüyorum. Biri bana neler olduğunu açıklayabilir misiniz "olabilir".

CEVAP
11 Temmuz 2009, CUMARTESİ


Derleyici bağımlı olduğu ve çeteleler arasında farklılık gösterebilir. Aşağıdaki semantiği

enum X { A, B };

// A has type int
assert(sizeof(A) == sizeof(int));

// some integer type. Maybe even int. This is
// implementation defined. 
assert(sizeof(enum X) == sizeof(some_integer_type));

Unutmayın "bazı tamsayı türü" C99 da genişletilmiş tamsayı türleri uygulanması, ancak, eğer bunları sağlıyorsa belge, hangi () içerebilir. Numaralandırma türü herhangi bir numaralandırma değeri (A ve bu durumda B) depolayan bir tür.

Numaralandırma kullanarak herhangi bir ceza olduğunu sanmıyorum. Sıralayıcısını sabiti ifadeleri de ayrılmaz bir parçasıdır statik veya dosya kapsam değişkenleri başlatmak için, örneğin kullanabilirsiniz), ve mümkün olduğunda makro onları tercih ederim.

Sıralayıcısını herhangi bir çalışma zamanı bellek ihtiyacı yok. Numaralandırma türü bir değişken oluşturduğunuzda, çalışma zamanı bellek kullanabilirsiniz. Sadece zaman sabitler derleme sıralayıcısını olarak düşün.

Sadece numaralandırma değerleri (değerler kaba aralığı önce el Bilmem Gereken) mağaza, dökme, ve ağ üzerinden gönderilen bir tür kullanmak istiyorsunuz. Tercihen türü bazı int32_t, farklı makineler söz konusu olduğunda çatışmalar gelmiyor bu yüzden gibi-sabit genişlikli bir olmalıdır. Veya yazdırmak ve bu sorunların bazıları kurtulur olan diğer tarafındaki atarım.

< / ^ hr .

Yanıt Düzenlemek için

Peki, derleyici herhangi bir boyut kullanmak için gerekli değildir. Görmek kolay bir şey değerleri işareti madde - imzasız türleri önemli performans bazı hesaplamalarda artırmak olabilir. Aşağıdaki kutudan 4.4.0 KİK davranıştır

int main(void) {
  enum X { A = 0 };
  enum X a; // X compatible with "unsigned int"
  unsigned int *p = &a;
}

Ama eğer X tipi int ** 10, GCC seçer atarsanız uyumludur

int main(void) {
  enum X { A = -1 };
  enum X a; // X compatible with "int"
  int *p = &a;
}

Seçeneği en küçük türü kullanır GCC --short-enums kullanarak hala tüm değerlere uygun.

int main() {
  enum X { A = 0 };
  enum X a; // X compatible with "unsigned char"
  unsigned char *p = &a;
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cekehechu

    cekehechu

    20 HAZİRAN 2006
  • Christopher Bill

    Christopher

    30 NİSAN 2009
  • esnathesinger

    esnathesinge

    6 NİSAN 2009