2013-01-18 18 views
5

C kodunda const'u nasıl kullanmam gerektiğini anlamaya çalışıyorum. İlk önce bunu kullanmaktan sıkılmadım, fakat daha sonra tüm kullanım boyunca const'un birkaç örneğini gördüm. Bir çaba sarf etmeli ve geri dönmeli ve dini uygun değişkenler const mu yapmalıyım? Yoksa sadece zamanımı mı bekleyeceğim?C anahtarında const anahtar sözcüğünü en iyi nasıl kullanırım?

Ben insan ve derleyicisi için hem daha kolay beklenen değişkenler, özellikle fonksiyon çağrılarında, değiştirmek için hangi okumayı kolaylaştırır varsayalım. Başka önemli noktaları kaçırıyor muyum? const kullanma

+1

Her şey bir değişkenin zaten. const, dediğiniz gibi, atanan değerin değiştirilmemesi gerektiğini ima eder. ancak senaryonun işaretçileriyle yüzleşebilir ve derleyicinin arkasındaki değerin ne olacağını değiştiremezsiniz: http://stackoverflow.com/questions/3801557/can-we-change-the-value-of-a-constant-through-pointers –

+0

İlgili : [Bana const doğruluğuna güven] (http://stackoverflow.com/questions/136880/sell-me-on-const-correctness) (C++, aynı zamanda C ile de ilgilidir). – netcoder

+0

İşe yarayacak uygulamalara geri dönmekten rahatsız olmazdım. Eğer kütüphaneleriniz varsa, 'const' kullanmaları kötü olmaz. Bazı noktalarda yine de pes etmek zorunda kalacaksınız. Örneğin 'const' ve çok boyutlu diziler gerçekten birlikte çok çalışırlar. – Shahbaz

cevap

5

const yazmış olduğudur, #define makro değildir.

const#define bir dosya için geçerlidir, Cı blok kapsamına. Parametre geçişi ile en yararlı olan

const. İşaretçilerle bir prototipte kullanılan const görüyorsanız, işlevini değiştirmeyeceği için dizininizi veya yapınızı geçirmenin güvenli olduğunu bilirsiniz. Hayır const ve yapabilir. gibi strcpy() ve ne demek istediğimi göreceksiniz için tanımına

bak. Başlangıçta prototipleri işlemek için "const-ness" uygulayın. Retro-uydurma const, "çok iş" (ama saat başına ödeme alırsanız Tamam) olarak çok zor değil.

Ayrıca düşünün:

const char *s = "Hello World"; 
char *s = "Hello World"; 
doğrudur

ve neden?

+0

Örneğinizde, ilk satırdaki '' Merhaba Dünya'' parçasını değiştiremediğimi varsayabilirim (ama ben '' '' '' '' '' s '' noktası '' diğer bir dizeye tamamıyla nokta yapabilirim '', doğru mu? Burada ve oradaki notasyonun, yani "char" dizilerinin nasıl derlenmesi gerektiği? – c00kiemonster

+0

@ c00kiemonster: Eğer içerikler değiştirilebiliyorsa, 'const' yapmayın. Fakat yukarıdaki örnekte, 's * sabittir ve bu yüzden değiştirilemez. –

+1

@ c00kiemonster: Evet, ilk örnek, const ile doğru. İkinci örnek yanlış ama maalesef yaygın. Salt okunur belleği (kilitlenme!) Değiştirmeye çalışır. Uzun zaman önce Visual Studio 5 bunu tamamladı ve bazı "ilginç" efektler verdi. – cdarke

1

sadece iyi bir uygulamadır ancak bazı yaygın hataları önlemeye yardımcı olur hem de kodun okunabilirliği ve kolay anlaşılabilir geliştirir. Uygun olduğu yerde kesinlikle const kullanın.

6
How do I best use the const keyword in C? 

Kullanım const bunu "salt okunur" yapmak istiyorum. Çok basit :)

İlgili konular