İçindekiler:
- Tüm uyarıları ve hata mesajlarını etkinleştirin
- Açık ve tutarlı bir kodlama stili seçin
- Yazarken kodu yorumlayın
- Hata ayıklayıcıdaki her yol en az bir kez
- Görünürlüğü sınırlama
- Yığın belleğini takip etme
- İşaretçileri işaret ettikten sonra işaretçileri sıfırlayın
- Hataları işlemek için özel durumlar kullanın
- Yıkıcıları sanal olarak bildirin
- Bir kopya yapıcı sağlayın ve aşırı yüklenmiş atama işleci
Video: C++ Ölüyor mu? Öğrenmek Hata mı? 2024
Hataları aramak ve kaldırmak için C ++ programlarınızı yazarken harcayacağınızdan daha fazla zaman harcamak talihsiz bir gerçektir. Buradaki öneriler, programlamayı daha keyifli bir deneyim haline getirmek için programlarınıza eklediğiniz hataların sayısını en aza indirmenize yardımcı olabilir.
Tüm uyarıları ve hata mesajlarını etkinleştirin
C ++ sözdizimi birçok hata denetimi yapmanıza izin verir. Derleyici, salt okunamayacağı bir yapıya kavuştuğunda, bir ileti çıkarma dışında başka seçeneği yoktur. Kaynak kodu ile yedeklemeyi dener (bazen başarıyla başarısız), ancak bir çalıştırılabilir dosyası oluşturmaz. Bu, programcıyı tüm hata mesajlarını düzeltmeye zorlar.
Bununla birlikte, C ++, bulabileceği bir yapıya rastladığında, ancak yapı her durumda kokuyorsa, C ++ bir uyarı mesajı üretir. C ++, istediğini anladığından emin olduğundan, ilerleyip bir yürütülebilir dosya oluşturur, böylece uyarıları yoksayabilirsiniz. Gerçekten, rahatsız edilmek istemiyorsanız, uyarıları devre dışı bırakabilirsiniz.
Uyarıların devre dışı bırakılması veya başka şekilde yok sayılması son derece kötü bir fikirdir. Aracınızın kontrol panelindeki "kontrol lambası" ışığının fişini çekmeniz biraz benzer, çünkü sizi rahatsız ediyor. Sorunu görmezlikten gelmek gitgide kurtarmaz.
Açık ve tutarlı bir kodlama stili seçin
C ++ kodunuzu açık ve tutarlı bir tarzda yazmak yalnızca programınızın okunabilirliğini arttırmakla kalmaz, aynı zamanda daha az kodlama hatası ile sonuçlanır. Bu biraz şaşırtıcı durum, beyinlerin yalnızca sınırlı miktarda bilgisayar gücü bulunduğundan kaynaklanmaktadır.
Temiz ve düzgün olan ve tanıdığınız bir stili izleyen kodu okuduğunuzda, C ++ ifadelerinin sözdizimini ayrıştırarak çok az beyin gücü harcıyorsunuz demektir. Bu, programın ne yapmaya çalıştıklarını çözmek için daha fazla beyin işlemcisi gücü bırakır ve nasıl yapıldığını değil.
İyi bir kodlama stili, aşağıdakileri kolaylıkla yapmanızı sağlar:
-
Sınıf isimleri, nesne adları ve işlev adları arasında ayrım yapma
-
Sınıf, işlev veya nesnenin neye benzediğini anlama
-
Önişlemci sembollerini C ++ sembollerinden ayırın (yani #define nesneleri öne çıkmalıdır)
-
C ++ kod bloklarını aynı seviyede tanımlayın (bu tutarlı girintilendirme sonucudur)
Buna ek olarak, modül başlıkları için her bir modüldeki işlevler veya sınıflar, yazar, tarih, sürüm ve değişiklik geçmişi hakkında bir bilgi sağlayan standart bir biçim oluşturmanız gerekir.
Tek bir projede yer alan tüm programcılar aynı kodlama stilini kullanmalıdır. Farklı kodlama stillerinin bir patchwork'inde yazılmış bir program kafa karıştırıcıdır ve profesyonelce görünmemektedir.
Yazarken kodu yorumlayın
Kodunuzu yazarken yorumluyorsanız, her şey düzgün çalışıncaya kadar beklemek yerine, geri dönüp yorumları eklemek hataları önleyebilirsiniz.
Yorumları formüle etmek, denemek istediğiniz şeyin stoğunu almaya zorlar. Kısa yorumlar aydınlatıcıdır, her ikisi de onları daha sonra okurken ve yazarken de. Sanki başka, bilgili bir programcı ile konuşuyorsanız yorumları yazın.
Hata ayıklayıcıdaki her yol en az bir kez
Bir programcı olarak, programınızın ne yaptığını anlamak zorundasınız. Programın beklenen değeri çıktısı yeterli değildir. Programınızın yaptığı her şeyi anlamanız gerekir. tek adımlık programından daha iyi bir şey hissettiren, iyi bir hata ayıklayıcıyla adım adım yürüterek (Code:: Blocks ile gelen gibi) size hiçbir şey vermezsiniz.
Buna ek olarak, bir programa hata ayıklarken, programın çalışmasıyla ortaya çıkabilecek bazı tuhaf davranışları anlamak için ham maddeye ihtiyacınız var. Hiçbir şey bu malzemeyi, hizmete girerken her bir işleve tek adım atmaktan daha iyi vermez.
Son olarak, bir işlev tamamlandığında ve programa eklenmeye hazır olduğunda, her mantıksal yolun en az bir kez dolaştırılması gerekir. Fonksiyonların geri kalanıyla birlikte pota atıldıktan sonra işlevleri kendiniz incelediğinizde hataların bulunması çok daha kolaydır - o zamana kadar dikkatinizi yeni programlama zorluklarına sokmuştur.
Görünürlüğü sınırlama
Sınıf iç mekanlarının görünürlüğünü dış dünyaya sınırlama, nesne yönelimli programlamanın temel taşlarından biridir. Sınıf kendi iç durumundan sorumlu olmalıdır - sınıfta bir şey berbat olursa, o zaman sınıf programcısının hatasıdır. Uygulama programcısı eldeki sorunun çözülmesi konusunda endişelenmelidir.
Özellikle, sınırlı görünürlük, veri üyelerinin sınıfın dışında erişilebilir olmaması gerektiği anlamına gelir - yani korumalı olarak işaretlenmelidir. Buna ek olarak, uygulama yazılımının bilmeye ihtiyacı olmayan üye işlevleri de korumalı olarak işaretlenmelidir. Sınıf iç kısımlarını işi bitirmek için gerekli olandan daha fazla maruz bırakmayın.
Yığın belleğini takip etme
Yığın belleğinin kaybolması, sahaya çıkarılan programlarda ölümcül hataların en yaygın kaynağıdır - ve aynı zamanda izini sürmek ve kaldırmak için en zor problemdir. (Bu hata sınıfı bulmak ve kaldırmak o kadar zor olduğundan, satın aldığınız programlarda yaygın) Bellek sızıntısının ne kadar büyük olduğuna bağlı olarak, sorunlar ortaya çıkmaya başlamadan önce bir saat boyunca bir programı çalıştırmanız gerekebilir.
Genel kural olarak, programcılar her zaman yığın belleğini aynı "seviyede ayırmalı ve serbest bırakmalıdır. "Bir üye işlevi MyClass:: create () yığın bellek bloğunu tahsis eder ve çağırana geri gönderir, öyleyse onu yığına döndüren MyClass:: release () üyesi olmalıdır.Özellikle MyClass:: create (), üst işlevin belleği serbest bırakmasını gerektirmez.
Mümkünse, MyClass bu bellek işaretçilerini tek başına takip etmeli ve yıkıcıda silmeli.
İşaretçileri işaret ettikten sonra işaretçileri sıfırlayın
İşaretçiler artık geçerli olmadıklarında sıfırlandığından emin olun; bunlara nullptr değeri atayarak yapabilirsiniz. Bu eylemin nedenleri deneyimle netleşiyor: Yığınına döndürülen ve hatta bunu bilmeyen bir bellek bloğu kullanmaya devam edebilirsiniz. Bir program, zamanın yüzde 99'unu iyi çalıştırabilir, böylece blokun yeniden tahsisi ve programın çalışmadığı vakaların yüzde 1'ini bulmak çok zor hale gelir.
Artık geçerli olmayan işaretçileri boşa çıkarırsanız ve bir değeri depolamak için kullanmaya çalışırsanız (boş bir konumda veya yakınında herhangi bir şey depolamazsanız), programınız derhal çökecektir. Çökme kötü gelir, ancak bir sorun ortaya çıkarsa olmaz. Sorun şu: onu üretime başlamadan önce bulup bulmadığınıza sadece bir soru.
Hataları işlemek için özel durumlar kullanın
C ++'daki istisna mekanizması, hataları rahatça ve verimli bir şekilde ele almak için tasarlanmıştır. Genel olarak, bir hata bayrağı yerine bir hata işareti atmanız gerekir. Ortaya çıkan kod, yazmak, okumak ve sürdürmek daha kolaydır. Ayrıca, diğer programcılar bunu beklemek için geldi ve onları hayal kırıklığına uğratmak istemezsiniz, değil mi?
İstisnaları kullanımınızı gerçek hatalarla sınırlayın. Bu fonksiyon için günlük yaşamın bir parçası olduğu takdirde "işe yaramadı" göstergesini döndüren bir işlevden bir istisna atmak gerekli değildir.
Yıkıcıları sanal olarak bildirin
Oluşturucu, yığın belleği gibi nesne sonuna gelindiğinde geri gönderilmesi gereken kaynakları ayırırsa, sınıfınız için bir yıkıcı oluşturmayı unutma. Bir yıkıcı yarattıysanız, onu sanal ilan etmeyi unutmayın.
"Ama," diyorsun ki, "sınıfım hiçbir şeyden miras kalmaz ve başka bir sınıf tarafından alt sınıflara ayrılmış değildir. "Evet, ancak gelecekte bir temel sınıf haline gelebilir. Yıkıcıyı sanal olarak bildirmemek için iyi bir nedeniniz yoksa sınıfı ilk oluştururken yapın.
Bir kopya yapıcı sağlayın ve aşırı yüklenmiş atama işleci
Sınıfınızın bir yıkıcıya ihtiyacı varsa, neredeyse mutlaka bir kopya oluşturucuya ve aşırı yüklenmiş bir atama işlecine ihtiyaç duyar. Yapıcınız yığın belleği gibi kaynakları ayırıyorsa, varsayılan kopya yapıcısı ve atama işleci, aynı kaynaklara birden çok işaretçi üreterek hasar oluşturmaz.
Bu nesnelerden birinin yıkıcı çağrıldığında, varlıkları geri yükleyecektir. Diğer kopyanın yıkıcısı geldiğinde, işler berbat olacak.