c assert assertion handling c with examples
Αυτό το C ++ Assert Tutorial ρίχνει φως σε ισχυρισμούς στο C ++ που είναι δηλώσεις για τη δοκιμή των υποθέσεων στο πρόγραμμα που έκανε ο προγραμματιστής:
τι είναι bug στη δοκιμή λογισμικού με παράδειγμα
Σε ένα πρόγραμμα C ++, συνήθως κάνουμε υποθέσεις σε ένα πρόγραμμα, όπως ένας πίνακας ευρετηρίου που πρέπει να είναι μεγαλύτερος από το μηδέν.
Όταν αυτές οι παραδοχές γίνουν πραγματικότητα, το πρόγραμμα εκτελεί το πρόστιμο, αλλά όταν αυτές οι παραδοχές γίνουν ψευδείς, το πρόγραμμα δεν τελειώνει κανονικά.
=> Επισκεφθείτε εδώ για το πλήρες μάθημα C ++ από ειδικούς.
Τι θα μάθετε:
Ισχυρισμοί σε C ++
Ένας ισχυρισμός είναι μια δήλωση στο C ++ που ελέγχει για μια κατάσταση όπως αυτή που εξηγήθηκε παραπάνω. Εάν η συνθήκη είναι αληθινή, το πρόγραμμα συνεχίζεται κανονικά και εάν η συνθήκη είναι ψευδής, το πρόγραμμα τερματίζεται και εμφανίζεται ένα μήνυμα σφάλματος.
Μπορούμε να παρέχουμε έναν ισχυρισμό χρησιμοποιώντας μια μακροεντολή προκαταρκτικού επεξεργαστή.
Με τον ακέραιο myInt, μπορούμε να δηλώσουμε μια δήλωση λέγοντας ότι το myInt πρέπει να είναι> 0 με τον ακόλουθο τρόπο.
assert (myInt > 0);
Ας υποθέσουμε ότι η τιμή του καθορισμένου myInt είναι -1, επομένως ο ισχυρισμός αποτυγχάνει όταν ο μεταγλωττιστής συναντά την παραπάνω δήλωση καθώς η τιμή myInt είναι -1. Μόλις αποτύχει ο ισχυρισμός, εκδίδεται ένα μήνυμα που δηλώνει μη έγκυρη δήλωση μαζί με το όνομα του προγράμματος και τον αριθμό γραμμής και το πρόγραμμα τερματίζεται.
Ένα γενικό πρωτότυπο του ισχυρισμού έχει ως εξής:
διεκδίκηση (συνθήκη) όπου συνθήκη => έκφραση κλιμακωτού τύπου
Το assert είναι μια μακροεντολή προεπεξεργαστή που χρησιμοποιείται για την αξιολόγηση μιας υπό όρους έκφρασης. Εάν η υπό όρους έκφραση αξιολογεί ψευδής, τότε το πρόγραμμα τερματίζεται μετά την εμφάνιση του μηνύματος σφάλματος. Το μήνυμα σφάλματος αποτελείται συνήθως από την αποτυχημένη έκφραση υπό όρους, το όνομα του αρχείου κώδικα και τον αριθμό γραμμής του ισχυρισμού.
Έτσι, γνωρίζουμε πού συνέβη το πρόβλημα καθώς και ποιο είναι το πρόβλημα που παρουσιάστηκε στον κώδικα. Ως εκ τούτου, η χρήση ισχυρισμών καθιστά τον εντοπισμό σφαλμάτων πιο αποτελεσματικό.
Η κεφαλίδα C ++< κασέρ > περιέχει τη λειτουργία διεκδίκησης. Χρησιμοποιούμε κυρίως τη λειτουργία διεκδίκησης στον κώδικα για να ελέγξουμε εάν οι παράμετροι που μεταβιβάζονται σε μια συνάρτηση είναι έγκυρες, για να ελέγξουμε την τιμή επιστροφής μιας συνάρτησης ή για να ελέγξουμε τα όρια του πίνακα μεταξύ άλλων.
Βασικό παράδειγμα της δήλωσης C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Παραγωγή:
Στο παραπάνω πρόγραμμα, χρησιμοποιήσαμε μια κλήση επιβεβαίωσης που περιέχει την έκφραση (myInt! = NULL) στη λειτουργία display_number. Στην κύρια συνάρτηση πρώτα, περνάμε μια μεταβλητή δείκτη second_ptr που περιέχει τη διεύθυνση της μεταβλητής myptr. Όταν πραγματοποιείται αυτή η κλήση, το ισχυρισμό είναι αληθινό. Ως εκ τούτου, η εκτέλεση του προγράμματος είναι φυσιολογική και εμφανίζεται η τιμή.
Στη δεύτερη κλήση προς το display_number, περνάμε τον μηδενικό δείκτη κάνοντας έτσι το ισχυρισμό ψευδές. Έτσι, όταν πραγματοποιείται η δεύτερη κλήση, εμφανίζεται ως μήνυμα αποτυχημένου ισχυρισμού όπως φαίνεται στην έξοδο.
Απενεργοποίηση του ισχυρισμού με το NDEBUG
Όταν χρησιμοποιούμε ισχυρισμούς, ελέγχονται κατά το χρόνο εκτέλεσης. Οι ισχυρισμοί καθιστούν τον εντοπισμό σφαλμάτων αποτελεσματικό, αλλά πρέπει να ληφθεί μέριμνα ώστε να μην περιλαμβάνονται ισχυρισμοί στην έκδοση κυκλοφορίας της εφαρμογής. Αυτό συμβαίνει επειδή γνωρίζουμε ότι όταν κυκλοφορούμε μια εφαρμογή, το κάνουμε μόνο όταν είμαστε σίγουροι ότι η εφαρμογή έχει ελεγχθεί διεξοδικά.
Επομένως, πρέπει να απενεργοποιήσουμε όλους τους ισχυρισμούς κατά την κυκλοφορία του λογισμικού. Μπορούμε να απενεργοποιήσουμε τους ισχυρισμούς σε ένα πρόγραμμα χρησιμοποιώντας τη μακροεντολή NDEBUG. Η χρήση της μακροεντολής NDEBUG σε ένα πρόγραμμα απενεργοποιεί όλες τις κλήσεις προς επιβεβαίωση.
Μπορούμε να συμπεριλάβουμε μια γραμμή που δίνεται παρακάτω στο πρόγραμμα για να απενεργοποιήσουμε όλες τις δηλώσεις επιβεβαίωσης.
#define NDEBUG
Ακολουθώντας τα προγράμματα C ++ δείχνει πώς συμπεριφέρεται το πρόγραμμα όταν σχολιάζεται το NDEBUG, καθώς και όταν το NDEBUG είναι ενεργό.
# 1) Το NDEBUG καθορίστηκε αλλά σχολίασε.
#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
'; }
Παραγωγή:
πώς να ανοίξετε ένα αρχείο torrent
Σε αυτό το πρόγραμμα, έχουμε καθορίσει τη δήλωση #define NDEBUG αλλά σχολιάζεται. Αυτό σημαίνει ότι η δήλωση assert είναι ενεργή. Έτσι, όταν το πρόγραμμα εκτελείται, η δεύτερη κλήση για επιβεβαίωση επιστρέφει ψευδής και ένα μήνυμα σφάλματος αναβοσβήνει και το πρόγραμμα ακυρώνεται.
# 2) Το NDEBUG είναι ενεργό.
#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
'; }
Παραγωγή:
Σε αυτό το πρόγραμμα, αποσυσκευάσαμε τη μακροεντολή NDEBUG. Τώρα όταν εκτελούμε το πρόγραμμα, οι δηλώσεις επιβεβαίωσης δεν είναι πλέον ενεργές. Ως εκ τούτου, το πρόγραμμα συνεχίζει την κανονική του εκτέλεση ακόμη και όταν η δεύτερη συνθήκη στη δήλωση επιβεβαίωσης είναι λανθασμένη.
Έτσι, αποσυνδέοντας τη γραμμή #define NDEBUG, απενεργοποιήσαμε τις δηλώσεις επιβεβαίωσης στο πρόγραμμα.
Assert και static_assert
Ο ισχυρισμός που έχουμε δει μέχρι στιγμής εκτελείται στο χρόνο εκτέλεσης. Το C ++ υποστηρίζει μια ακόμη μορφή επιβεβαίωσης γνωστή ως static_assert και εκτελεί έλεγχο διεκπεραίωσης χρόνου μεταγλώττισης. Είναι παρόν από το C ++ 11.
Το static_assert έχει την ακόλουθη γενική σύνταξη.
static_assert (bool_constexpr, message)
Εδώ bool_constexpr => c Μετατράπηκε σταθερά έκφραση του τύπου bool.
Μήνυμα => Συμβολοσειρά που θα εμφανίζεται ως μήνυμα σφάλματος εάν το bool_constexpr είναι ψευδές.
Έτσι, εάν το bool_constexpr αξιολογηθεί ως αληθές, το πρόγραμμα προχωρά κανονικά. Εάν το bool_constexpr αξιολογηθεί ως false, τότε εκδίδεται ένα σφάλμα μεταγλωττιστή.
Το παρακάτω πρόγραμμα δείχνει τη χρήση του static_assert σε ένα πρόγραμμα C ++.
#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
'; }
Παραγωγή:
Στο παραπάνω πρόγραμμα, παρέχουμε στο static_assert μια έκφραση και ένα μήνυμα. Όταν αποτύχει, εκδίδεται ένα σφάλμα μεταγλωττιστή όπως φαίνεται στην έξοδο.
Συχνές Ερωτήσεις
Q # 1) Τι είναι το Assert στο C ++;
Απάντηση: Ένας ισχυρισμός στο C ++ είναι μια προκαθορισμένη μακροεντολή χρησιμοποιώντας την οποία μπορούμε να δοκιμάσουμε ορισμένες παραδοχές που ορίζονται στο πρόγραμμα. Όταν η υπό όρους έκφραση σε μια δήλωση επιβεβαίωσης έχει οριστεί ως αληθής, το πρόγραμμα συνεχίζεται κανονικά. Αλλά όταν η έκφραση είναι ψευδής, εκδίδεται ένα μήνυμα σφάλματος και το πρόγραμμα τερματίζεται.
Q # 2) Τι είναι το static_assert;
Απάντηση: Το Static_assert αξιολογείται κατά το χρόνο μεταγλώττισης έναντι της δήλωσης assert () που αξιολογείται κατά το χρόνο εκτέλεσης.
Το Static_assert έχει ενσωματωθεί στο C ++ από το C ++ 11 και μετά. Χρειάζεται η υπό όρους έκφραση και ένα μήνυμα που θα εμφανίζεται ως ορίσματα. Όταν η συνθήκη αξιολογείται ως ψευδής, εκδίδεται ένα σφάλμα μεταγλωττιστή και εμφανίζεται το μήνυμα. Το πρόγραμμα τερματίζεται.
Q # 3) Ποιος είναι ο σκοπός της μακροεντολής assert ();
Απάντηση: Η μακροεντολή Assert () χρησιμοποιείται για τον έλεγχο των συνθηκών ή παραδοχών που δεν πρέπει να εμφανίζονται σε ένα πρόγραμμα. Για παράδειγμα, ο δείκτης πίνακα πρέπει πάντα να είναι> 0. Μια άλλη υπόθεση μπορεί να είναι 2 + 2 == 3 + 1.
pl sql ερωτήσεις συνέντευξης για έμπειρους
Έτσι, χρησιμοποιώντας το assert () μπορούμε να δοκιμάσουμε τέτοιες παραδοχές και όσο αξιολογούνται ως αληθές, το πρόγραμμά μας λειτουργεί κανονικά. Όταν είναι ψευδείς, το πρόγραμμα τερματίζεται.
συμπέρασμα
Σε αυτό το σεμινάριο, έχουμε δει τη λειτουργία των δηλώσεων assert () στο C ++. Η δήλωση assert () ορίζεται στην κεφαλίδα. Μπορούμε να απενεργοποιήσουμε τον ισχυρισμό χρησιμοποιώντας τη μακροεντολή NDEBUG. Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί ότι ο ισχυρισμός δεν μπορεί να χρησιμοποιηθεί στον κώδικα παραγωγής, καθώς αναμένεται ότι ο κώδικας παραγωγής έχει δοκιμαστεί διεξοδικά και δεν περιέχει σφάλματα.
Εκτός από το assert () η δήλωση C ++ 11 υποστηρίζει επίσης static_assert () που αξιολογείται κατά τη μεταγλώττιση. Όταν το static_asset () αξιολογηθεί ως false, εκδίδεται ένα σφάλμα μεταγλωττιστή και τερματίζεται το πρόγραμμα.
Οι ισχυρισμοί είναι ένας τρόπος για να δοκιμάσετε τις παραδοχές στο πρόγραμμα και με την αξιολόγηση των υπό όρους εκφράσεων εντός των ισχυρισμών, μπορούμε να δοκιμάσουμε το πρόγραμμα διεξοδικά και ο εντοπισμός σφαλμάτων γίνεται πιο αποτελεσματικός.
=> Δείτε ΟΛΟΥΣ τα μαθήματα C ++ εδώ.
Συνιστώμενη ανάγνωση
- C # Εκπαιδευτικός χειρισμός εξαίρεσης με παραδείγματα κώδικα
- Παραδείγματα ισχυρισμών σεληνίου - Πρακτικές εφαρμογές σε έργα
- C # Δομή προγράμματος και βασική σύνταξη με παραδείγματα
- Εκμάθηση Python DateTime με παραδείγματα
- Αποκοπή εντολής στο Unix με παραδείγματα
- Unix Cat Command Syntax, Επιλογές με παραδείγματα
- Χρήση δρομέα στο MongoDB με παραδείγματα
- Ls Command στο Unix με παραδείγματα