SORU
22 HAZİRAN 2012, Cuma


vs Objective-C sabit tanımlama #

Objective-C yeniyim ve bir kaç soru const ve önişleme yönergesi #define ile ilgili.

İlk olarak, olası sabit #define kullanarak türünü tanımlamak için değil bulundu. Bu yüzden mi?

Başka bir kişi üzerinde bunları kullanmak için herhangi bir avantajı vardır?

Son olarak, hangi yol daha verimli ve/veya daha güvenli?

CEVAP
22 HAZİRAN 2012, Cuma


İlk olarak, olası sabit kullanarak bu türü tanımlamak için değil buldum #, bu yüzden mi? tanımla

Neden ne? Bu doğru değil:

#define MY_INT_CONSTANT ((int) 12345)

Başka bir kişi üzerinde bunları kullanmak için herhangi bir avantajı vardır?

Evet. #define bile derleme başlamadan önce yerine bir makro tanımlar. const sadece derleyici varsa onu değiştirmeye çalışırsanız bir hata bayrağı böylece bir değişken değiştirir. Hangi #define kullanabilirsiniz kapsamları vardır ama const son çınlama kullanarak bulmak için mücadele ediyorum, ancak () kullanabilirsiniz. Teoride, const yürütülebilir alanı kaplıyor ve hafıza için bir başvuru gerektirir, ama pratikte bu önemsiz ve derleyici tarafından optimize uzakta olabilir.

const#defines daha derleyici ve hata ayıklayıcı dostu vardır. Çoğu durumda, bu kullanmak için hangi karar verirken göz önünde bulundurmanız gereken öncelikli noktası.

Sadece #define const kullanabileceğiniz bir bağlam düşündüm. Eğer .c çok sayıda dosya olarak kullanmak istediğiniz bir sabit varsa, #define ile, sadece bir başlık koy. Bir const C dosyasında bir tanım var

// in a C file
const int MY_INT_CONST = 12345;

// in a header
extern const int MY_INT_CONST;

bir başlığında. MY_INT_CONST tanımlı olduğu dışında herhangi bir C dosyasında statik ya da genel kapsamlı bir dizinin boyutu olarak kullanılabilir.

Ancak, tamsayı sabitleri enum bir kullanabilirsiniz. Aslında o Elmayı hemen her zaman yaptığı şey. Bu iki #defines consts tüm avantajları var ama bir tek tamsayı sabitleri için çalışıyor.

// In a header
enum
{
    MY_INT_CONST = 12345,
};

Son olarak, hangi yol daha verimli ve/veya daha güvenli?

#define dediğim gibi, modern Derleyiciler muhtemelen çok az fark var olun, ancak teoride daha etkilidir. #define Her zaman atamak için denemek için derleyici bir hata olduğunu daha güvenlidir

#define FOO 5

// ....

FOO = 6;   // Always a syntax error

consts derleyici uyarı sorun olsa da atanmış içine kandırdın olabilir:

const int FOO = 5;

// ...

(int) FOO = 6;     // Can make this compile

Platforma bağlı olarak, atama hala sürekli salt okunur bir segmente yerleştirilir ve resmi olarak tanımlanmamış C standardına göre bir davranış olursa, çalışma zamanında başarısız olabilir.

Şahsen, tamsayı sabitleri için, ben her zaman diğer türleri sabitler enums kullanın, çok iyi bir nedenim olmadığı sürece const kullanıyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Deany Boii

    Deany Boii

    27 Kasım 2007
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • Rayone GB

    Rayone GB

    14 Temmuz 2007