Σπίτι Προσωπικά Οικονομικά 10 τρόποι αποφυγής σφαλμάτων σε C ++ - ανδρείκελα

10 τρόποι αποφυγής σφαλμάτων σε C ++ - ανδρείκελα

Πίνακας περιεχομένων:

Βίντεο: Pitsos P1ZAI1251W 2024

Βίντεο: Pitsos P1ZAI1251W 2024
Anonim

Είναι ατυχές το γεγονός ότι θα περάσετε περισσότερο χρόνο ψάχνοντας και αφαιρώντας σφάλματα από ό, τι θα ξοδέψετε στην πραγματικότητα γράφοντας τα προγράμματα C ++ σας στην πρώτη θέση. Οι προτάσεις εδώ μπορεί να σας βοηθήσουν να ελαχιστοποιήσετε τον αριθμό των σφαλμάτων που εισάγετε στα προγράμματά σας για να κάνετε τον προγραμματισμό μια πιο ευχάριστη εμπειρία.

Ενεργοποίηση όλων των προειδοποιήσεων και μηνυμάτων σφαλμάτων

Η σύνταξη της C ++ επιτρέπει πολύ έλεγχο σφαλμάτων. Όταν ο μεταγλωττιστής συναντά μια κατασκευή που απλά δεν μπορεί να αποκρυπτογραφήσει, δεν έχει άλλη επιλογή παρά να εκπέμπει ένα μήνυμα. Προσπαθεί να συγχρονίσει το αντίγραφο ασφαλείας με τον πηγαίο κώδικα (μερικές φορές λιγότερο από επιτυχώς), αλλά δεν θα δημιουργήσει ένα εκτελέσιμο αρχείο. Αυτό αναγκάζει τον προγραμματιστή να διορθώσει όλα τα μηνύματα σφάλματος.

Η απενεργοποίηση ή η αδιαφορία για τις προειδοποιήσεις είναι μια εξαιρετικά κακή ιδέα. Είναι λίγο σαν να αποσυνδέετε τη λυχνία ελέγχου μοτέρ στο ταμπλό του αυτοκινήτου σας επειδή σας ενοχλεί. Η παραβίαση του προβλήματος δεν το κάνει να εξαφανιστεί.

Υιοθετήστε ένα σαφές και σταθερό στυλ κωδικοποίησης

Η σύνταξη του κώδικα C ++ σας σε ένα σαφές και σταθερό στυλ όχι μόνο βελτιώνει την αναγνωσιμότητα του προγράμματος σας, αλλά και οδηγεί σε λιγότερα λάθη κωδικοποίησης. Αυτή η κάπως περίεργη κατάσταση των πραγμάτων προκύπτει από το γεγονός ότι οι εγκέφαλοι μας έχουν περιορισμένη μόνο υπολογιστική ισχύ.

Όταν διαβάζετε έναν κώδικα που είναι καθαρός και τακτοποιημένος και ακολουθώντας ένα στυλ που εξοικειύεστε με αυτό, περνάτε πολύ λίγη εγκεφαλική δύναμη αναλύοντας τη σύνταξη των δηλώσεων C ++. Αυτό αφήνει περισσότερη δύναμη CPU εγκεφάλου για να αποκωδικοποιήσει το τι προσπαθεί να κάνει το πρόγραμμα και όχι πώς το κάνει.

Ένα καλό στυλ κωδικοποίησης σας επιτρέπει να κάνετε τα εξής με ευκολία:

Διαφοροποίηση μεταξύ ονομάτων τάξεων, ονομάτων αντικειμένων και ονομάτων λειτουργιών

  • Κατανοήστε τι χρησιμοποιείται η κλάση, η λειτουργία ή το αντικείμενο, με βάση το όνομά του

  • Διαχωρίστε τα σύμβολα του preprocessor από τα σύμβολα C ++ (δηλαδή, τα #define αντικείμενα πρέπει να ξεχωρίζουν)

  • Προσδιορίστε τα μπλοκ του κώδικα C ++ στο ίδιο επίπεδο (αυτό είναι το αποτέλεσμα της συνεπούς εσοχής)

  • Επιπλέον, πρέπει να δημιουργήσετε μια τυποποιημένη μορφή για τις κεφαλίδες της μονάδας σας, η οποία παρέχει πληροφορίες σχετικά με τις λειτουργίες ή τις κλάσεις σε κάθε ενότητα, τον συγγραφέα, την ημερομηνία, την έκδοση και κάτι για το ιστορικό τροποποιήσεων.

Όλοι οι προγραμματιστές που συμμετέχουν σε ένα έργο πρέπει να χρησιμοποιούν το ίδιο στυλ κωδικοποίησης. Ένα πρόγραμμα γραμμένο σε ένα συνονθύλευμα διαφορετικών μορφών κωδικοποίησης προκαλεί σύγχυση και φαίνεται αντιεπαγγελματική.

Σχολιάστε τον κώδικα ενώ γράφετε

Μπορείτε να αποφύγετε σφάλματα εάν σχολιάζετε τον κώδικα ενώ γράφετε, αντί να περιμένετε μέχρι να λειτουργήσει ο καθένας και στη συνέχεια να επιστρέψετε και να προσθέσετε σχόλια.

Η διατύπωση σχολίων σας αναγκάζει να κάνετε απολογισμό του τι προσπαθείτε να κάνετε. Τα σύντομα σχόλια είναι διαφωτιστικά, τόσο όταν τα διαβάζετε αργότερα όσο και τα γράφετε. Γράψτε σχόλια σαν να μιλάτε με έναν άλλο, ενημερωμένο προγραμματιστή.

Ένα μονοπάτι κάθε διαδρομή στο πρόγραμμα εντοπισμού σφαλμάτων τουλάχιστον μία φορά

Ως προγραμματιστής, πρέπει να καταλάβετε τι κάνει το πρόγραμμά σας. Δεν αρκεί να εκπέμπει το πρόγραμμα την αναμενόμενη τιμή. Πρέπει να καταλάβετε όλα όσα κάνει το πρόγραμμά σας. Τίποτα δεν σας δίνει μια καλύτερη αίσθηση για ό, τι συμβαίνει κάτω από την κουκούλα από το

single-stepping του προγράμματος, εκτελώντας το βήμα προς βήμα με ένα καλό εργαλείο εντοπισμού σφαλμάτων (όπως αυτό που έρχεται με το Code:: Blocks). Πέρα από αυτό, καθώς σφαλίζετε ένα πρόγραμμα, χρειάζεστε πρώτες ύλες για να υπολογίσετε κάποια παράξενη συμπεριφορά που μπορεί να εμφανιστεί καθώς τρέχει το πρόγραμμα. Τίποτα δεν σας δίνει αυτό το υλικό καλύτερα από την απλή βηματισμό μέσα από κάθε λειτουργία καθώς έρχεται σε λειτουργία.

Τέλος, όταν μια λειτουργία έχει ολοκληρωθεί και είναι έτοιμη να προστεθεί στο πρόγραμμα, κάθε λογική διαδρομή πρέπει να διανυθεί τουλάχιστον μία φορά. Τα σφάλματα είναι πολύ πιο εύκολα να βρεθούν όταν εξετάζετε τη λειτουργία από μόνη της και όχι αφού έχει ριχτεί στο δοχείο με τις υπόλοιπες λειτουργίες - μέχρι τότε, η προσοχή σας έχει προχωρήσει σε νέες προκλήσεις προγραμματισμού.

Περιορισμός της ορατότητας

Ο περιορισμός της ορατότητας των εσωτερικών τάξεων στον εξωτερικό κόσμο είναι ένας ακρογωνιαίος λίθος του αντικειμενοστρεφούς προγραμματισμού. Η τάξη πρέπει να είναι υπεύθυνη για την εσωτερική της κατάσταση - αν κάτι ξεπεραστεί στην τάξη, τότε είναι λάθος του προγραμματιστή. Ο προγραμματιστής εφαρμογών πρέπει να ανησυχεί για την επίλυση του προβλήματος στο χέρι.

Ειδικότερα, η περιορισμένη ορατότητα σημαίνει ότι τα μέλη δεδομένων δεν πρέπει να είναι προσιτά έξω από την τάξη - δηλαδή, πρέπει να επισημαίνονται ως προστατευμένα. Επιπλέον, οι λειτουργίες μελών που δεν χρειάζεται να γνωρίζουν το λογισμικό εφαρμογών θα πρέπει επίσης να φέρουν προστασία. Μην εκθέτετε περισσότερα από τα εσωτερικά της κλάσης από τα απαραίτητα για να ολοκληρώσετε τη δουλειά.

Παρακολουθήστε τη μνήμη σωρού

Η απώλεια της μνήμης σωρών είναι η πιο συνηθισμένη πηγή θανατηφόρων σφαλμάτων σε προγράμματα που έχουν κυκλοφορήσει στο πεδίο - και, ταυτόχρονα, το δυσκολότερο να εντοπιστεί και να απομακρυνθεί. (Επειδή αυτή η κατηγορία σφαλμάτων είναι τόσο δύσκολο να βρεθεί και να αφαιρεθεί, είναι επικρατέστερη στα προγράμματα που αγοράζετε.) Μπορεί να χρειαστεί να εκτελέσετε ένα πρόγραμμα για ώρες πριν αρχίσουν να προκύπτουν προβλήματα (ανάλογα με το πόσο μεγάλη είναι η διαρροή μνήμης).

Κατά γενικό κανόνα, οι προγραμματιστές θα πρέπει πάντα να διαθέτουν και να απελευθερώνουν μνήμη σωρού στο ίδιο "επίπεδο". "Εάν ένα μέλος συνάρτηση MyClass:: create () διαθέτει ένα μπλοκ μνήμης σωρού και το επιστρέφει στον καλούντα, τότε θα πρέπει να υπάρχει ένα μέλος MyClass:: release () που το επιστρέφει στον σωρό.Συγκεκριμένα, το MyClass:: create () δεν θα πρέπει να απαιτεί τη γονική λειτουργία για να απελευθερώσει τη μνήμη.

Εάν είναι εφικτό, το MyClass θα πρέπει να παρακολουθεί από μόνος του αυτούς τους δείκτες μνήμης και να τις διαγράφει στον καταστροφικό παράγοντα.

Μηδενικοί δείκτες μετά τη διαγραφή αυτού που δείχνουν

Βεβαιωθείτε ότι έχετε μηδενικούς δείκτες αφού δεν είναι πλέον έγκυροι. το πράττετε αναθέτοντας την τιμή nullptr. Οι λόγοι για αυτήν την ενέργεια γίνονται σαφείς με την εμπειρία: Μπορείτε να συνεχίσετε να χρησιμοποιείτε ένα μπλοκ μνήμης που έχει επιστραφεί στον σωρό και δεν το γνωρίζει καν. Ένα πρόγραμμα μπορεί να τρέξει πρόστιμο 99 τοις εκατό του χρόνου, καθιστώντας πολύ δύσκολο να βρεθεί το 1 τοις εκατό των περιπτώσεων όπου το μπλοκ παίρνει ανακατανέμονται και το πρόγραμμα δεν λειτουργεί.

Εάν ακυρώσετε δείκτες που δεν είναι πλέον έγκυροι και επιχειρείτε να τις χρησιμοποιήσετε για να αποθηκεύσετε μια τιμή (δεν μπορείτε να αποθηκεύσετε τίποτα στη θέση ή κοντά στην μηδενική θέση), το πρόγραμμά σας θα καταρρεύσει αμέσως. Η συντριβή ακούγεται άσχημα, αλλά δεν είναι αν εκθέτει ένα πρόβλημα. Το πρόβλημα είναι εκεί. είναι απλώς ένα ερώτημα αν το βρίσκετε ή όχι πριν το θέσετε σε παραγωγή.

Χρήση εξαιρέσεων για χειρισμό σφαλμάτων

Ο μηχανισμός εξαίρεσης της C ++ έχει σχεδιαστεί για να χειρίζεται εύκολα και αποτελεσματικά τα σφάλματα. Γενικά, πρέπει να ρίξετε έναν δείκτη σφάλματος αντί να επιστρέψετε μια σημαία σφάλματος. Ο κώδικας που προκύπτει είναι ευκολότερος στην εγγραφή, ανάγνωση και συντήρηση. Εκτός αυτού, άλλοι προγραμματιστές έχουν έρθει να το περιμένουν και δεν θα θέλατε να τους απογοητεύσετε, έτσι;

Περιορίστε τη χρήση εξαιρέσεων από αληθή σφάλματα. Δεν είναι απαραίτητο να ρίξετε μια εξαίρεση από μια λειτουργία που επιστρέφει έναν δείκτη "δεν δούλευε", αν αυτό είναι μέρος της καθημερινής ζωής για τη λειτουργία αυτή.

Δηλώστε καταστροφές εικονικές

Μην ξεχάσετε να δημιουργήσετε ένα καταστροφικό για την κλάση σας αν ο κατασκευαστής διαθέτει πόρους, όπως η μνήμη σωρού, που πρέπει να επιστραφούν όταν το αντικείμενο φτάσει στην τελική κατάρρευση του. Έχοντας δημιουργήσει έναν καταστροφικό, μην ξεχάσετε να το δηλώσετε εικονικό.

"Αλλά," λέτε, "η τάξη μου δεν κληρονομεί από τίποτα και δεν είναι υποκλάση από άλλη τάξη. "Ναι, αλλά

θα μπορούσε να γίνει μια βασική κατηγορία στο μέλλον. Αν δεν έχετε κάποιο καλό λόγο να μην δηλώσετε τον καταστροφικό εικονικό, τότε το κάνετε όταν δημιουργείτε για πρώτη φορά την τάξη. Παρέχετε έναν κατασκευαστή αντιγράφων και έναν υπερφορτωμένο τελεστή αποστολής

Εάν η τάξη σας χρειάζεται καταστροφέα, σχεδόν σίγουρα χρειάζεται κατασκευαστής αντιγράφων και τελεστή υπερφόρτωσης. Εάν ο κατασκευαστής σας διαθέτει πόρους όπως τη μνήμη σωρού, ο προεπιλεγμένος κατασκευαστής αντιγράφων και ο χειριστής εκχώρησης δεν θα κάνουν τίποτα παρά να δημιουργήσουν χάος δημιουργώντας πολλαπλάσια δείκτες στους ίδιους πόρους.

Όταν ενεργοποιείται ο καταστροφέας ενός από αυτά τα αντικείμενα, θα αποκατασταθούν τα στοιχεία ενεργητικού. Όταν ο καταστροφέας για το άλλο αντίγραφο έρθει, θα βιδώσει τα πράγματα.

10 τρόποι αποφυγής σφαλμάτων σε C ++ - ανδρείκελα

Η επιλογή των συντακτών

Πώς να αλλάξετε τη ρύθμιση ισορροπίας λευκού σε ετικέτες Canon EOS 70D

Πώς να αλλάξετε τη ρύθμιση ισορροπίας λευκού σε ετικέτες Canon EOS 70D

Χρησιμοποιώντας το Ο έλεγχος εξισορρόπησης λευκού στο Canon EOS 70D σας μπορεί εύκολα και γρήγορα να διορθώσει προβλήματα χρώματος. Οι διαθέσιμες ρυθμίσεις ισορροπίας λευκού απεικονίζονται με τα σύμβολα που εμφανίζονται στον παρακάτω πίνακα. Μπορείτε να δείτε την τρέχουσα ρύθμιση στην οθόνη Ρυθμίσεις λήψης, όπως φαίνεται στο παρακάτω σχήμα. Για να προσαρμόσετε τη ρύθμιση, έχετε ...

Η επιλογή των συντακτών

Προετοιμασία αντιγράφου TIFF ψηφιακής εικόνας για δημοσίευση - ανδρεικέλες

Προετοιμασία αντιγράφου TIFF ψηφιακής εικόνας για δημοσίευση - ανδρεικέλες

Μπορείτε να δημιουργήσετε αντίγραφο TIFF ψηφιακής εικόνας εύκολα. Για παράδειγμα, εάν θέλετε να υποβάλετε μια ψηφιακή φωτογραφία σε μια δημοσίευση εκτύπωσης, χρειάζεστε ένα αρχείο φωτογραφίας μορφής TIFF. Για να δημιουργήσετε ένα αντίγραφο TIFF ενός αρχείου σε ένα πρόγραμμα επεξεργασίας φωτογραφιών:

Εξάγοντας το περίγραμμα επιλογής του ψηφιακού σας επεξεργαστή εικόνας - ανδρείκελα

Εξάγοντας το περίγραμμα επιλογής του ψηφιακού σας επεξεργαστή εικόνας - ανδρείκελα

Η πρώτη προσπάθεια. Αναμείνετε να βελτιώσετε το περίγραμμα επιλογής σας τουλάχιστον λίγο. Μπορείτε να βελτιώσετε το περίγραμμα σας με διάφορους τρόπους: Αντίστροφη περιγράμματος επιλογής: Απλά χρησιμοποιήστε την εντολή Invert (ή την αντίστοιχη εντολή του προγράμματος). Προσθέστε σε περίγραμμα επιλογής: ...

Επιλογή από τις άκρες της ψηφιακής εικόνας - ανδρείκελα

Επιλογή από τις άκρες της ψηφιακής εικόνας - ανδρείκελα

Όπου οι φωτεινές περιοχές πληρούν τις σκοτεινές περιοχές. Πολλά προγράμματα επεξεργασίας φωτογραφιών σας επιτρέπουν να σχεδιάσετε ένα περίγραμμα επιλογής κατά μήκος ενός άκρου. Το εργαλείο αναζητά άκρες κοντά στο σημείο που σύρετε το ποντίκι.

Η επιλογή των συντακτών

Πώς να χρησιμοποιείτε το παράθυρο μητρώου του QuickBooks 2010 - dummies

Πώς να χρησιμοποιείτε το παράθυρο μητρώου του QuickBooks 2010 - dummies

Για να εργαστείτε ευκολότερα με το παράθυρο του Μητρώου και να ελέγξετε τον τρόπο εμφάνισής του: Το κουμπί Μετάβαση: Εμφανίζει το παράθυρο διαλόγου Μετάβαση (Go To). Αυτό το παράθυρο διαλόγου σάς επιτρέπει να αναζητήσετε μια συναλλαγή στο παράθυρο "Εγγραφή". Για παράδειγμα, μπορείτε να αναζητήσετε ...

Πώς να εργάζεστε με έναν υπάρχοντα προϋπολογισμό σε QuickBooks - dummies

Πώς να εργάζεστε με έναν υπάρχοντα προϋπολογισμό σε QuickBooks - dummies

Σε μεγάλες εταιρείες με εκατοντάδες ή χιλιάδες εργαζόμενοι, δύο ή τρία άτομα δαπανούν μεγάλο μέρος ή και ολόκληρο το χρόνο εργασίας τους με τα στοιχεία που έχουν εγγραφεί στον προϋπολογισμό. Για να επεξεργαστείτε έναν υπάρχοντα προϋπολογισμό στο QuickBooks, ακολουθήστε τα παρακάτω βήματα:

Πώς να χρησιμοποιείτε τα κουτιά παραθύρων αναφορών του QuickBooks - dummies

Πώς να χρησιμοποιείτε τα κουτιά παραθύρων αναφορών του QuickBooks - dummies

Από, Προς, Στήλες και Ταξινόμηση. Αυτά τα πλαίσια σας επιτρέπουν επίσης να ελέγχετε τις πληροφορίες που εμφανίζονται στο παράθυρο αναφοράς και την εμφάνιση των πληροφοριών. Για παράδειγμα, μπορείτε να ενημερώσετε το QuickBooks για το χρονικό διάστημα που θέλετε ...