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
İ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
#define
s 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 #define
s const
s 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
const
s 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 enum
s kullanın, çok iyi bir nedenim olmadığı sürece const
kullanıyorum.
Tanımlama genel sabit C ...
Tanımlama statik sabit sınıf tanımında...
Bu durumun bir parçası olarak bir deği...
Otomatik Tanımlama Bilgisi İşlemeyi C#...
Sabit bir Diziyi bildirmek...