SORU
4 Kasım 2009, ÇARŞAMBA


&; statik sabit" vs " quot;#define" C

Hangisi C ifadeleri arasında aşağıda kullanmak daha iyidir?

static const int var=5;

ya

#define var 5

CEVAP
4 Kasım 2009, ÇARŞAMBA


Değeri neye ihtiyacınız olduğuna bağlı. (Ve herkes şimdiye kadar) üçüncü alternatif atlanmış:

  1. static const int var = 5;
  2. #define var 5
  3. enum { var = 5 };

İsim seçimi ile ilgili sorunları görmezden gelmek, o zaman:

  • Eğer bir işaretçi geçmek gerekirse, kullanımı (1) gerekir.
  • Yana (2) görünüşe göre bir seçenek, işaretçiler geçmek gerekmez.
  • Her ikisi de (1) ve (3) hata ayıklayıcısını simge tablosunda bir sembol var - bu daha kolay hata ayıklama yapar. (2) bir sembol değil daha büyük olasılıkla, size ne olduğunu merak bırakarak.
  • (1) Genel kapsamında diziler için bir boyut olarak kullanılabilir; hem de (2) ve (3).
  • (1) Bu işlev kapsamında statik diziler için bir boyut olarak kullanılabilir; hem de (2) ve (3).
  • Yerli diziler için kullanılabilir tüm C99, altında. Teknik olarak, kullanarak (1) boyut '' elbette Boyutu 5'te sabit olur. var tarafından başvurulan olsa bir VLA (değişken uzunlukta dizi) ima eder
  • (1) Bu anahtar, tablolar gibi yerlerde kullanılan; her ikisi de (2) ve (3).
  • (2) işlemcisi tarafından kullanılır, çünkü değişti istemediğini kodu değiştirebilir; ikisi de (1) ve (3) yan etkileri böyle beklenmedik olmaz.
  • (2) Bu kadar basit ayarlandı, ne de (1) Ne (3) buna izin verip vermediğini tespit edebilirsiniz.

Yani, çoğu bağlamda, 'alternatifler üzerinde. numaralama tercih Aksi halde, ilk ve son mermi noktaları kontrol eden faktörler olması muhtemeldir - ve eğer ikisi de aynı anda tatmin etmek için gerekirse zor düşünmek zorunda.

Eğer C sorup , sonra (1) - statik sabit - her zaman seçeneği kullanmak istiyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • brokenbellsVEVO

    brokenbellsV

    11 EYLÜL 2009
  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008