Η δήλωση goto
Το γ έχει μια δήλωση goto που επιτρέπει στα μη δομημένα άλματα για να γίνει. Για να χρησιμοποιήσετε μια δήλωση goto, χρησιμοποιείτε απλά το διατηρημένο goto λέξης που ακολουθείται από το συμβολικό όνομα στο οποίο επιθυμείτε να πηδήσετε. Το όνομα τοποθετείται έπειτα οπουδήποτε στο πρόγραμμα που ακολουθείται από μια άνω και κάτω τελεία. Μπορείτε να πηδήσετε σχεδόν οπουδήποτε μέσα σε μια λειτουργία, αλλά δεν επιτρέπεστε για να πηδήσετε σε έναν βρόχο, αν και έχετε την άδεια για να πηδήσετε από έναν βρόχο.
Αυτό το ιδιαίτερο πρόγραμμα είναι πραγματικά βρωμίζει αλλά είναι ένα καλό παράδειγμα γιατί οι συγγραφείς λογισμικού προσπαθούν να αποβάλουν τη χρήση της δήλωσης goto όσο το δυνατόν περισσότερο. Η μόνη θέση σε αυτό το πρόγραμμα όπου είναι λογικό να χρησιμοποιηθεί το goto είναι, όπου το πρόγραμμα πηδά από τους τρεις τοποθετημένους βρόχους σε ένα άλμα. Σε αυτήν την περίπτωση θα ήταν μάλλον ακατάστατο για να οργανώσει μια μεταβλητή και να πηδήσει διαδοχικά από κάθε έναν από τους τρεις τοποθετημένους βρόχους αλλά μια δήλωση goto σας παίρνει και από τις τρεις κατά τρόπο πολύ συνοπτικό.
Μερικά πρόσωπα λένε ότι η δήλωση goto δεν πρέπει ποτέ να χρησιμοποιηθεί κάτω από οποιεσδήποτε περιστάσεις, αλλά αυτό είναι στενή απασχολημένη σκέψη. Εάν υπάρχει μια θέση όπου ένα goto θα κάνει σαφώς μια πιό τακτοποιημένη ροή ελέγχου από κάποιο άλλο κατασκεύασμα, να αισθανθεί ελεύθερος να το χρησιμοποιήσει, εντούτοις, δεδομένου ότι είναι στο υπόλοιπο του προγράμματος για το όργανο ελέγχου σας. Δείτε το παράδειγμα:
#include <stdio.h>
int main()
{
int dog, cat, pig;
goto real_start;
some_where:
printf("This is another line of the mess.\n");
goto stop_it;
/* το εξής τμήμα είναι το μόνο τμήμα με ένα χρησιμοποιήσιμο goto */
real_start:
for(dog = 1 ; dog < 6 ; dog = dog + 1)
{
for(cat = 1 ; cat < 6 ; cat = cat + 1)
{
for(pig = 1 ; pig < 4 ; pig = pig + 1)
{
printf("Dog = %d Cat = %d Pig = %d\n", dog, cat, pig);
if ((dog + cat + pig) > 8 ) goto enough;
}
}
}
enough: printf("Those are enough animals for now.\n");
/* αυτό είναι το τέλος του τμήματος με μια χρησιμοποιήσιμη δήλωση goto */
printf("\nThis is the first line of the code.\n");
goto there;
where:
printf("This is the third line of the code.\n");
goto some_where;
there:
printf("This is the second line of the code.\n");
goto where;
stop_it:
printf("This is the last line of this mess.\n");
return 0;
}
Δείτε τα αποτελέσματα που επιδεικνύονται
Dog = 1 Cat = 1 Pig = 1
Dog = 1 Cat = 1 Pig = 2
Dog = 1 Cat = 1 Pig = 3
Dog = 1 Cat = 2 Pig = 1
Dog = 1 Cat = 2 Pig = 2
Dog = 1 Cat = 2 Pig = 3
Dog = 1 Cat = 3 Pig = 1
Dog = 1 Cat = 3 Pig = 2
Dog = 1 Cat = 3 Pig = 3
Dog = 1 Cat = 4 Pig = 1
Dog = 1 Cat = 4 Pig = 2
Dog = 1 Cat = 4 Pig = 3
Dog = 1 Cat = 5 Pig = 1
Dog = 1 Cat = 5 Pig = 2
Dog = 1 Cat = 5 Pig = 3
Those are enough animals for now.
This is the first line of the code.
This is the second line of the code.
This is the third line of the code.
This is another line of the mess.
This is the last line of this mess. |
|