c assert assertion handling c with examples
Bu C ++ Onaylama Öğreticisi, Programcı Tarafından Yapılan Programdaki Varsayımları Test Etmek İçin İfadeler olan C ++ 'daki İddialara Işık Tutar:
Windows 10 için en iyi ekran alıntısı aracı
Bir C ++ programında, genellikle bir programda dizi indeksinin sıfırdan büyük olması gerektiği gibi varsayımlar yaparız.
Bu varsayımlar gerçekleştiğinde, program cezayı çalıştırır, ancak bu varsayımlar yanlış olduğunda program normal şekilde sona ermez.
=> Uzmanlardan Tam C ++ Kursu İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
C ++ 'daki Onaylar
Bir iddia, yukarıda açıklandığı gibi bir koşulu test eden C ++ 'da bir ifadedir. Koşul doğruysa, program normal şekilde devam eder ve koşul yanlışsa, program sonlandırılır ve bir hata mesajı görüntülenir.
Bir assert önişlemci makrosu kullanarak bir iddia sağlayabiliriz.
MyInt tamsayısıyla, aşağıdaki şekilde myInt> 0 olmalıdır diyen bir iddia bildirebiliriz.
assert (myInt > 0);
MyInt değerinin -1 olduğunu varsayalım, bu nedenle derleyici yukarıdaki ifadeyle karşılaştığında myInt değeri -1 olduğu için iddia başarısız olur. Onaylama işlemi başarısız olduğunda, program adı ve satır numarasıyla birlikte geçersiz iddiayı belirten bir mesaj verilir ve program sonlandırılır.
Genel bir assert prototipi aşağıdaki gibidir:
assert (koşul) burada koşul => skaler tipin ifadesi
Bir iddia, koşullu ifadeyi değerlendirmek için kullanılan bir ön işlemci makrodur. Koşullu ifade yanlış olarak değerlendirilirse, hata mesajı görüntülendikten sonra program sonlandırılır. Hata mesajı tipik olarak başarısız koşullu ifade, kod dosyasının adı ve iddianın satır numarasından oluşur.
Böylece, sorunun nerede oluştuğunu ve kodda meydana gelen sorunun ne olduğunu öğrenmiş oluyoruz. Bu nedenle iddiaları kullanmak, hata ayıklamayı daha verimli hale getirir.
C ++ başlığı< Cassert > assert işlevini içerir. Bir işleve iletilen parametrelerin geçerli olup olmadığını, bir işlevin dönüş değerini kontrol etmek veya diğer şeylerin yanı sıra dizi sınırlarını kontrol etmek için koddaki assert işlevini çoğunlukla kullanırız.
C ++ Onayının Temel Örneği.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Çıktı:
Yukarıdaki programda, display_number fonksiyonunda ifadeyi (myInt! = NULL) içeren bir assert çağrısı kullandık. İlk olarak ana fonksiyonda, myptr değişkeninin adresini içeren bir second_ptr gösterici değişkenini iletiriz. Bu çağrı yapıldığında iddia doğrudur. Bu nedenle programın yürütülmesi normaldir ve değer görüntülenir.
İkinci display_number çağrısında, boş göstericiyi geçerek assert false yaparız. Böylece, ikinci çağrı yapıldığında, çıktıda gösterildiği gibi onaylama başarısız mesajı görüntülenir.
NDEBUG ile Onaylamayı Devre Dışı Bırakma
İddiaları kullandığımızda, çalışma zamanında kontrol edilirler. İddialar hata ayıklamayı verimli kılar, ancak uygulamanın yayın yapısına iddiaları dahil etmemeye özen gösterilmelidir. Bunun nedeni, bir uygulamayı yayınladığımızda bunu yalnızca uygulamanın kapsamlı bir şekilde test edildiğinden emin olduğumuzda yaptığımızı bilmemizdir.
Bu yüzden, yazılımı yayınladığımızda tüm iddiaları devre dışı bırakmamız gerekiyor. Bir programdaki iddiaları NDEBUG makrosunu kullanarak devre dışı bırakabiliriz. Bir programda NDEBUG makrosunun kullanılması, onaylanacak tüm çağrıları devre dışı bırakır.
Tüm assert ifadelerini devre dışı bırakmak için programa aşağıda verilen bir satırı ekleyebiliriz.
#define NDEBUG
Aşağıdaki C ++ programları, NDEBUG yorumlandığında ve NDEBUG etkin olduğunda programın nasıl davrandığını gösterir.
# 1) NDEBUG belirtildi ancak yorum yapıldı.
#include // uncomment to disable assert() //#define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Asset disabled...execution continuous with invalid expression
'; }
Çıktı:
torrent dosyası nasıl açılır
Bu programda #define NDEBUG deyimini belirledik ama yorum yapıldı. Bu, assert ifadesinin aktif olduğu anlamına gelir. Böylece, program yürütüldüğünde, ikinci onaylama çağrısı yanlış döndürür ve bir hata mesajı yanıp söner ve program durdurulur.
# 2) NDEBUG etkin.
#include // uncomment: assert() disabled #define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Çıktı:
Bu programda NDEBUG makrosunun açıklamasını kaldırdık. Şimdi programı çalıştırdığımızda, assert ifadeleri artık aktif değil. Bu nedenle program, assert ifadesindeki ikinci koşul yanlış olsa bile normal çalışmasına devam eder.
Böylece, #define NDEBUG satırının açıklamasını kaldırarak, programdaki assert ifadelerini devre dışı bıraktık.
Assert Ve static_assert
Şimdiye kadar gördüğümüz iddia çalışma zamanında yürütülüyor. C ++, static_assert olarak bilinen başka bir onaylama biçimini destekler ve derleme zamanı onaylama denetimi gerçekleştirir. C ++ 11'den beri mevcuttur.
Bir static_assert aşağıdaki genel sözdizimine sahiptir.
static_assert (bool_constexpr, message)
Burada bool_constexpr => cBool türünde bağlamsal olarak dönüştürülmüş sabit ifade.
Mesaj => bool_constexpr yanlışsa hata mesajı olarak görünecek dizge.
Dolayısıyla bool_constexpr true olarak değerlendirilirse, program normal şekilde ilerler. Bool_constexpr false olarak değerlendirilirse, bir derleyici hatası verilir.
Aşağıdaki program bir C ++ programında static_assert kullanımını göstermektedir.
#include #include using namespace std; int main() { assert(2+2==3+1); static_assert(2+2==3+1, '2+2 = 3+1'); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); static_assert(2+2==1+1, '2+2 != 1+1'); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Çıktı:
Yukarıdaki programda, static_assert'e bir ifade ve bir mesaj sağladık. Başarısız olduğunda, çıktıda gösterildiği gibi bir derleyici hatası verilir.
Sıkça Sorulan Sorular
S # 1) C ++ 'da Assert nedir?
torrent dosyalarını nasıl açarım
Cevap: C ++ 'daki bir iddia, programda ayarlanan belirli varsayımları test edebileceğimiz önceden tanımlanmış bir makrodur. Bir assert deyimindeki koşullu ifade true olarak ayarlandığında, program normal şekilde devam eder. Ancak ifade yanlış olduğunda bir hata mesajı verilir ve program sonlandırılır.
S # 2) static_assert nedir?
Cevap: Static_assert, çalışma zamanında değerlendirilen assert () deyimine göre derleme zamanında değerlendirilir.
Static_assert, C ++ 11'den itibaren C ++ 'ya dahil edilmiştir. Koşullu ifadeyi ve bağımsız değişken olarak görüntülenecek bir mesajı alır. Koşul yanlış olarak değerlendirildiğinde, bir derleyici hatası verilir ve mesaj görüntülenir. Program daha sonra sonlandırılır.
S # 3) assert () makrosunun amacı nedir?
Cevap: Assert () makrosu, bir programda gerçekleşmemesi gereken koşulları veya varsayımları test etmek için kullanılır. Örneğin, dizi dizini her zaman> 0 olmalıdır. Başka bir varsayım 2 + 2 == 3 + 1 olabilir.
Yani assert () kullanarak bu tür varsayımları test edebiliriz ve doğru olarak değerlendirildikleri sürece programımız normal şekilde çalışır. Yanlış olduklarında program sonlandırılır.
Sonuç
Bu eğiticide, C ++ 'da assert () ifadelerinin çalıştığını gördük. Assert () ifadesi başlıkta tanımlanmıştır. NDEBUG makrosunu kullanarak assert'i devre dışı bırakabiliriz. Geliştiriciler, üretim kodunun kapsamlı bir şekilde test edilmesi ve hatasız olması beklendiği için üretim kodunda iddia kullanılamayacağına dikkat etmelidir.
Assert () ifadesinin yanı sıra C ++ 11, derleme zamanında değerlendirilen static_assert () işlevini de destekler. Static_asset () false olarak değerlendirildiğinde, bir derleyici hatası verilir ve program sonlandırılır.
İddialar, programdaki varsayımları test etmenin bir yoludur ve iddiaların içindeki koşullu ifadeleri değerlendirerek programı iyice test edebilir ve hata ayıklama daha verimli hale gelir.
=> TÜM C ++ Öğreticilerini Buradan Kontrol Edin.
Önerilen Kaynaklar
- Kod Örnekleriyle C # İstisna İşleme Eğitimi
- Selenyum İddiası Örnekleri - Projelerde Pratik Uygulamalar
- C # Program Yapısı ve Örneklerle Temel Sözdizimi
- Örneklerle Python DateTime Eğitimi
- Örneklerle Unix'te Kesme Komutu
- Unix Cat Komut Sözdizimi, Örneklerle Seçenekler
- MongoDB'de İmleç Kullanımı Örneklerle
- Örneklerle Unix'te Ls Komutu