Τι σημαίνει το int main στο γ. Διαφορά μεταξύ int main() και int main(void); Τυπικές και πραγματικές παράμετροι

Λειτουργία κύρια.

Κάθε πρόγραμμα C και C++ πρέπει να έχει μια κύρια λειτουργία. και εξαρτάται από εσάς που θα το τοποθετήσετε. Μερικοί προγραμματιστές το τοποθετούν στην αρχή του αρχείου, κάποιοι στο τέλος. Ωστόσο, ανεξάρτητα από τη θέση του, πρέπει να θυμάστε τα εξής: Ορίσματα στη συνάρτηση "κύρια". Η διαδικασία εκκίνησης Borland C++ στέλνει τρεις παραμέτρους (ορίσματα) στην κύρια συνάρτηση: argc, argv και env. - argc, ένας ακέραιος, είναι ο αριθμός των ορισμάτων της γραμμής εντολών που αποστέλλονται στην κύρια συνάρτηση, - το argv είναι ένας πίνακας δεικτών σε συμβολοσειρές (char *). Στο DOS 3.x και μεταγενέστερο, το argv ορίζεται ως η πλήρης διαδρομή του προγράμματος που πρόκειται να ξεκινήσει. Όταν εκτελείται σε προηγούμενες εκδόσεις του DOS, το argv δείχνει μια μηδενική συμβολοσειρά (""). Το argv δείχνει στην πρώτη γραμμή εντολών μετά το όνομα του προγράμματος. Το argv δείχνει στη δεύτερη γραμμή εντολών μετά το όνομα του προγράμματος. Το argv δείχνει το τελευταίο όρισμα που στάλθηκε στο main. Το argv περιέχει NULL. - το env είναι επίσης μια σειρά από δείκτες σε συμβολοσειρές. Κάθε στοιχείο env περιέχει μια συμβολοσειρά της μορφής ENVVAR=value. Το ENVVAR είναι το όνομα μιας μεταβλητής περιβάλλοντος, όπως PATH ή 87.<значение>αυτή είναι η τιμή μιας δεδομένης μεταβλητής περιβάλλοντος, για παράδειγμα C:\DOS;C:\TOOLS (για PATH) ή YES (για 87). Σημειώστε, ωστόσο, ότι εάν καθορίσετε μερικά από αυτά τα ορίσματα, πρέπει να τα καθορίσετε με αυτή τη σειρά: argc, argv, env. Για παράδειγμα, οι ακόλουθες δηλώσεις ορισμάτων είναι έγκυρες: main() main(int argc) /* έγκυρο αλλά όχι πολύ καλό */ main(int argc, char *argv) main(int argc, char *argv, char *env) Main (int) δήλωση argc) δεν είναι πολύ βολικό γιατί γνωρίζοντας τον αριθμό των παραμέτρων, δεν έχετε πρόσβαση σε αυτές οι ίδιοι. Το όρισμα env είναι πάντα προσβάσιμο μέσω της καθολικής μεταβλητής περιβάλλοντος. Δείτε τη μεταβλητή περιβάλλοντος (στο Κεφάλαιο 3) και τις συναρτήσεις putenv και getenv (στο Κεφάλαιο 2). Οι παράμετροι argc και argv είναι επίσης διαθέσιμες μέσω των μεταβλητών _argc και _argv. Παράδειγμα προγράμματος που χρησιμοποιεί argc, argv και env. Αυτό είναι ένα παράδειγμα προγράμματος, το ARGS.EXE, το οποίο δείχνει τον απλούστερο τρόπο χρήσης των ορισμάτων που μεταβιβάζονται στην κύρια συνάρτηση. /* Πρόγραμμα ARGS.C */ #include #περιλαμβάνω void main(int argc, char *argv, char *env) ( int i; printf("Η τιμή του argc είναι %d \n\n",argc); printf("Η γραμμή εντολών περιέχει %d παραμέτρους \n\ n" ,argc); για (i=0; i<=argc; i++) printf(" argv[%d]: %s\n",i,argv[i]); printf("Среда содержит следующие строки:\n"); for (i=0; env[i] != NULL; i++) printf(" env[%d]: %s\n",i,env[i]); return 0; } Предположим, что вы запускаете программу ARGS.EXE со следующей командной строкой: C:> args first_arg "arg with Blanks" 3 4 "Last but one" stop! Σημειώστε ότι μπορείτε να στείλετε ένα όρισμα με κενά περικλείοντάς το σε διπλά εισαγωγικά, όπως φαίνεται στο παράδειγμα "επιχείρημα με κενά" και "τελευταίο αλλά ένα" στην κλήση προγράμματος. Ως αποτέλεσμα της εκτέλεσης του προγράμματος, θα λάβετε κάτι σαν το εξής: Η τιμή του argc είναι 7 Η γραμμή εντολών περιέχει 7 παραμέτρους argv: c:\turboc\testargs.exe argv: first_arg argv: arg με κενό argv: 3 argv : 4 argv: τελευταίο αλλά ένα argv: σταματήστε! Το περιβάλλον περιέχει τις ακόλουθες γραμμές: env: COMSPEC=C:\COMMAND.COM env: PROMPT=$p $g env: PATH=C:\SPRINT;C:\DOS;C:\BC Μέγιστο συνολικό μήκος της γραμμής εντολών αποστέλλεται στην κύρια συνάρτηση (συμπεριλαμβανομένων των διαστημάτων και του ονόματος του ίδιου του προγράμματος), δεν μπορεί να υπερβαίνει τους 128 χαρακτήρες. Αυτοί είναι περιορισμοί του DOS. Χαρακτήρες διαφυγής γραμμής εντολών Τα ορίσματα γραμμής εντολών μπορούν να περιέχουν χαρακτήρες διαφυγής. Ωστόσο, μπορούν να επεκταθούν για όλα τα ονόματα αρχείων που ταιριάζουν με το όρισμα με τον ίδιο τρόπο που γίνεται, για παράδειγμα, με την εντολή αντιγραφής DOS. Για να χρησιμοποιήσετε σύμβολα διαφυγής, όταν συνδέετε το πρόγραμμά σας με το σύνδεσμο, πρέπει να συμπεριλάβετε το αρχείο αντικειμένου WILDARGS.OBJ που συνοδεύει το Borland C++. Εάν το αρχείο WILDARGS.OBJ είναι συνδεδεμένο στο πρόγραμμά σας, μπορείτε να χρησιμοποιήσετε ορίσματα όπως "*.*" στη γραμμή εντολών. Σε αυτήν την περίπτωση, τα ονόματα όλων των αρχείων που ταιριάζουν με αυτήν τη μάσκα εισάγονται στον πίνακα argv. Το μέγιστο μέγεθος του πίνακα argv εξαρτάται μόνο από το μέγεθος της περιοχής δυναμικής μνήμης. Εάν δεν βρέθηκαν κατάλληλα αρχεία για μια δεδομένη μάσκα, τότε το όρισμα μεταβιβάζεται στη μορφή με την οποία πληκτρολογήθηκε στη γραμμή εντολών. (Δηλαδή, η κύρια συνάρτηση περνάει μια συμβολοσειρά που περιέχει χαρακτήρες διαφυγής). Τα επιχειρήματα που περικλείονται σε διπλά εισαγωγικά ("...") δεν επεκτείνονται. Παράδειγμα. Οι ακόλουθες εντολές μεταγλωττίζουν το αρχείο ARGS.C και το συνδέουν με τη λειτουργική μονάδα WILDARGS.OBJ και, στη συνέχεια, εκτελέστε το πρόγραμμα ARGS.EXE που προκύπτει: bcc args wildarg.obj args C:\BORLANDC\INCLUDE\*.H "*.C" Κατά την εκτέλεση του ARGS.EXE, το πρώτο όρισμα επεκτείνεται στα ονόματα όλων των αρχείων με επέκταση H στον κατάλογο Borland C++ INCLUDE. Σημειώστε ότι όλες οι γραμμές περιλαμβάνουν την πλήρη διαδρομή (για παράδειγμα C:\TC\INCLUDE\ALLOC.H). Το όρισμα *.C δεν επεκτείνεται επειδή περικλείεται σε εισαγωγικά. Εάν εργάζεστε σε ένα ολοκληρωμένο περιβάλλον (BC.EXE), τότε απλά πρέπει να καθορίσετε στο μενού έργου το όνομα του αρχείου έργου, το οποίο θα πρέπει να περιέχει τις ακόλουθες γραμμές: ARGS WILDARGS.OBJ Στη συνέχεια, χρησιμοποιώντας το "Run/Arguments ", θα πρέπει να ορίσετε τις παραμέτρους της γραμμής εντολών. Σχόλιο. Εάν θέλετε να πραγματοποιείται πάντα η επεξεργασία χαρακτήρων διαφυγής, π.χ. Προκειμένου το WILDARGS.OBJ να συνδεθεί αυτόματα από το πρόγραμμα επεξεργασίας συνδέσμων, πρέπει να τροποποιήσετε την τυπική βιβλιοθήκη C?.LIB ώστε να περιλαμβάνει το αρχείο WILDARGS.OBJ. Για να το κάνετε αυτό, αφαιρέστε το SETARGV από τη βιβλιοθήκη και προσθέστε το WILDARGS. Αυτό μπορεί να γίνει με τις ακόλουθες εντολές (υποθέτουμε ότι οι τυπικές βιβλιοθήκες και το WILDARGS.OBJ περιέχονται στον τρέχοντα κατάλογο): Το TLIB περιγράφεται στο Κεφάλαιο 7, Βοηθητικά προγράμματα, του Οδηγού χρήστη. tlib cs -setargv +wildargs tlib cc - setargv +wildargs tlib cm -setargv +wildargs tlib cl -setargv +wildargs tlib ch -setargv +wildargs Μεταγλώττιση με χρήση του διακόπτη -p (σύμβαση κλήσης Pascal) Εάν μεταγλωττίσετε το πρόγραμμά σας χρησιμοποιώντας τη σύμβαση κλήσης Pascal (περιγράφεται λεπτομερώς στο Κεφάλαιο 9 " Διασύνδεση με γλώσσα assembly", "Οδηγός προγραμματιστή"), πρέπει να θυμάστε ότι η κύρια συνάρτηση πρέπει να δηλωθεί ρητά ως συνάρτηση C. Αυτό μπορεί να γίνει χρησιμοποιώντας λέξη-κλειδίΤο cdecl είναι κάπως έτσι: cdecl main(int argc, char *argv, char *env) Η τιμή που επιστρέφεται από την κύρια συνάρτηση. Η κύρια συνάρτηση επιστρέφει μια τιμή που είναι ο κωδικός εξόδου του προγράμματος: αυτός είναι ένας ακέραιος αριθμός. Ωστόσο, εάν το πρόγραμμά σας χρησιμοποιεί τη συνάρτηση exit (ή _exit) για έξοδο, τότε η τιμή επιστροφής θα είναι το όρισμα αυτής της συνάρτησης. Για παράδειγμα, εάν το πρόγραμμά σας περιέχει μια κλήση: exit(1), τότε ο κωδικός εξόδου θα είναι 1. Εάν χρησιμοποιείτε το ολοκληρωμένο περιβάλλον Borland C++ (BC.EXE) για να εκτελέσετε το πρόγραμμα, τότε μπορείτε να δείτε την τιμή επιστροφής του main λειτουργία επιλέγοντας "Αρχείο | Λήψη πληροφοριών".

Σελίδα 53 από 85

1.5.3. Μεταβίβαση παραμέτρων στην κύρια συνάρτηση

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

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

Η κεφαλίδα της κύριας συνάρτησης μοιάζει με αυτό:

Εάν, για παράδειγμα, η γραμμή εντολών ενός προγράμματος στη γλώσσα προγραμματισμού C μοιάζει με:

A:\>cprog που λειτουργεί "πρόγραμμα C" 1

τότε τα ορίσματα argc, argv, argp αντιπροσωπεύονται στη μνήμη όπως φαίνεται στο διάγραμμα στο Σχ. 1.

Argc[4]
argv --> -->
-->
-->
-->
argp --> -->
-->
-->
-->
Εικ.1. Διάταξη επιλογών γραμμής εντολών

Το λειτουργικό σύστημα υποστηρίζει μεταβίβαση τιμών για τις παραμέτρους argc, argv, argp και είναι ευθύνη του χρήστη να περάσει και να χρησιμοποιήσει τα πραγματικά ορίσματα στην κύρια συνάρτηση.

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

Παράδειγμα:
int main (int argc, char *argv, char *argp)
( int i=0;
printf("\nΌνομα προγράμματος %s", argv);
για (i=1; i>=argc; i++)
printf("\n όρισμα %d είναι %s", argv[i]);
printf("\nΡυθμίσεις λειτουργικού συστήματος:");
ενώ (*argp)
( printf ("\n %s",*argp);
argp++;
}
επιστροφή(0);
}

Μπορείτε επίσης να προσπελάσετε τις παραμέτρους του λειτουργικού συστήματος χρησιμοποιώντας τη συνάρτηση βιβλιοθήκης geteuv· το πρωτότυπό της μοιάζει με αυτό:

char *geteuv (const char *varname);

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

Χρησιμοποιώντας τον δείκτη που λαμβάνεται από τη συνάρτηση geteuv, μπορείτε να διαβάσετε μόνο την τιμή της παραμέτρου του λειτουργικού συστήματος, αλλά δεν μπορείτε να την αλλάξετε. Η συνάρτηση puteuv χρησιμοποιείται για την αλλαγή της τιμής μιας παραμέτρου συστήματος.

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

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

setargv()
}
-seteuv()
( επιστροφή ; /* κενή συνάρτηση */
}
int main()
( /* κύρια συνάρτηση χωρίς ορίσματα */
...
...
renurn(0);
}

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

Το Borland C++ υποστηρίζει τρία ορίσματα στο main(). Τα δύο πρώτα είναι τα παραδοσιακά argc και argv. Αυτά είναι τα μόνα ορίσματα για main() που ορίζονται από το πρότυπο ANSI C. Επιτρέπουν τη μετάδοση ορισμών γραμμής εντολών στο πρόγραμμα. Τα ορίσματα γραμμής εντολών είναι οι πληροφορίες που ακολουθούν το όνομα του προγράμματος στη γραμμή εντολών του λειτουργικού συστήματος. Για παράδειγμα, όταν ένα πρόγραμμα μεταγλωττίζεται χρησιμοποιώντας τον μεταγλωττιστή γραμμής Borland, συνήθως πληκτρολογείται bcc όνομα_προγράμματος

Οπου όνομα_προγράμματοςείναι ένα πρόγραμμα που πρέπει να μεταγλωττιστεί. Το όνομα του προγράμματος μεταβιβάζεται στον μεταγλωττιστή ως όρισμα.

Η παράμετρος argc περιέχει τον αριθμό των ορισμάτων της γραμμής εντολών και είναι ακέραιος. Είναι πάντα ίσο με τουλάχιστον 1, αφού το όνομα του προγράμματος χαρακτηρίζεται ως το πρώτο όρισμα. Η παράμετρος argv είναι ένας δείκτης σε έναν πίνακα δεικτών χαρακτήρων. Κάθε στοιχείο αυτού του πίνακα δείχνει ένα όρισμα γραμμής εντολών. Όλα τα ορίσματα της γραμμής εντολών είναι συμβολοσειρές. Όλοι οι αριθμοί μετατρέπονται από το πρόγραμμα σε εσωτερική μορφή. Το ακόλουθο πρόγραμμα εκτυπώνει "Hello" ακολουθούμενο από το όνομα χρήστη όταν πληκτρολογείται αμέσως μετά το όνομα του προγράμματος:

#περιλαμβάνω

{
if(argc!=2)
{
printf("Ξεχάσατε να πληκτρολογήσετε το όνομά σας\n");
επιστροφή 1;
}
printf("Γεια %s", argv);
επιστροφή 0;
}

Εάν καλέσετε αυτό το όνομα προγράμματος και το όνομα χρήστη είναι Sergey, τότε για να ξεκινήσετε το πρόγραμμα θα πρέπει να πληκτρολογήσετε:
όνομα Σεργκέι.
Ως αποτέλεσμα του προγράμματος θα εμφανιστούν τα εξής:
«Γεια σου Σεργκέι».

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

Αποτελείται από τρεις γραμμές, ενώ

Χερμπ, Ρικ, Φρεντ

Αυτή είναι μία γραμμή - τα κόμματα δεν είναι οριοθέτες.

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

"αυτό είναι ένα τεστ"

Είναι σημαντικό να δηλώσετε σωστά το argv. Η πιο χαρακτηριστική μέθοδος είναι:

Οι κενές παρενθέσεις υποδεικνύουν ότι ο πίνακας δεν έχει σταθερό μήκος. Μπορείτε να έχετε πρόσβαση μεμονωμένα στοιχείαχρησιμοποιώντας ευρετηρίαση argv. Για παράδειγμα, το argv δείχνει στην πρώτη γραμμή, η οποία περιέχει πάντα το όνομα του προγράμματος. Το argv δείχνει στην επόμενη γραμμή και ούτω καθεξής.

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

/* πρόγραμμα μέτρησης */

#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
int main(int argc, char *argv)
{
int disp, count?
εάν (argc<2)
{
printf("Πρέπει να εισαγάγετε το μήκος της μέτρησης\n");
printf("στη γραμμή εντολών. Δοκιμάστε ξανά.\n");
επιστροφή 1;
}
if (argc==3 && !strcmp(argv,"display")) disp = 1;
else disp = 0;
for(count=atoi(argv); count; -count)
if (disp) printf("%d ", count);
printf("%c", "\a"); /* στους περισσότερους υπολογιστές αυτή είναι μια κλήση */
επιστροφή 0;
}

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

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

#περιλαμβάνω
int main(int argc, char *argv)
{
int t, i;
για(t=0; t {
i = 0;
ενώ(argv[t][i])
{
printf("%c", argv[t][i]);
}
printf(" ");
}
επιστροφή 0;
}

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

Συνήθως τα argc και argv χρησιμοποιούνται για τη λήψη εντολών πηγής. Είναι θεωρητικά δυνατό να έχετε έως και 32767 ορίσματα, αλλά τα περισσότερα λειτουργικά συστήματα δεν σας επιτρέπουν καν να το πλησιάσετε. Συνήθως αυτά τα ορίσματα χρησιμοποιούνται για τον καθορισμό ενός ονόματος αρχείου ή επιλογών. Η χρήση ορισμάτων γραμμής εντολών δίνει στο πρόγραμμα μια επαγγελματική εμφάνιση και επιτρέπει στο πρόγραμμα να χρησιμοποιηθεί σε αρχεία δέσμης.

Εάν συμπεριλάβετε το αρχείο WILDARGS.OBJ που παρέχεται με το Borland C++, μπορείτε να χρησιμοποιήσετε πρότυπα σε ορίσματα τύπου *.EXE. (Το Borland C++ χειρίζεται αυτόματα χαρακτήρες μπαλαντέρ και αυξάνει το argc ανάλογα.) Για παράδειγμα, εάν συνδέσετε το WILDARGS.OBJ στο ακόλουθο πρόγραμμα, θα σας πει πόσα αρχεία ταιριάζουν με το όνομα αρχείου που καθορίζεται στη γραμμή εντολών:

/* Συνδέστε αυτό το πρόγραμμα με το WILDARGS.OBJ */

#περιλαμβάνω
int main(int argc, char *argv)
{
εγγραφή int i;
printf("%d αρχεία ταιριάζουν με το καθορισμένο όνομα\n", argc-1);
printf("Είναι: ");
για(i=1; i printf("%s ", argv[i]);
επιστροφή 0;
}

Εάν ονομάσουμε αυτό το πρόγραμμα WA και στη συνέχεια το εκτελέσουμε ως εξής, θα λάβουμε τον αριθμό των αρχείων με την επέκταση EXE και μια λίστα με τα ονόματα αυτών των αρχείων:

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

Όπως μπορείτε να δείτε, το env δηλώνεται με τον ίδιο τρόπο όπως το argv. Ακριβώς όπως το argv, είναι ένας δείκτης σε μια σειρά από συμβολοσειρές. Κάθε γραμμή είναι μια συμβολοσειρά περιβάλλοντος που ορίζεται από το λειτουργικό σύστημα. Η παράμετρος env δεν έχει ισοδύναμη παράμετρο argc που να λέει πόσες σειρές περιβάλλοντος υπάρχουν. Αντίθετα, η τελευταία γραμμή του περιβάλλοντος είναι μηδενική. Το παρακάτω πρόγραμμα εκτυπώνει όλες τις συμβολοσειρές περιβάλλοντος που ορίζονται αυτήν τη στιγμή στο λειτουργικό σύστημα:

/* αυτό το πρόγραμμα εμφανίζει όλες τις γραμμές περιβάλλοντος */

#περιλαμβάνω
int main(int argc, char *argv, char *env)
{
int t;
for(t=0; env[t]/ t++)
printf("%s\n", env[t]);
επιστροφή 0;
}

Λάβετε υπόψη ότι παρόλο που το argc και το argv δεν χρησιμοποιούνται από το πρόγραμμα, πρέπει να υπάρχουν στη λίστα παραμέτρων. Ο C δεν γνωρίζει τα ονόματα των παραμέτρων. Αντίθετα, η χρήση τους καθορίζεται από τη σειρά με την οποία δηλώνονται οι παράμετροι. Στην πραγματικότητα, μπορείτε να καλέσετε την παράμετρο όπως θέλετε. Δεδομένου ότι τα argc, argv και env είναι παραδοσιακά ονόματα, είναι καλύτερο να συνεχίσετε να τα χρησιμοποιείτε, έτσι ώστε όποιος διαβάζει το πρόγραμμα να μπορεί αμέσως να καταλάβει ότι αυτά είναι ορίσματα στη συνάρτηση main().

Μια τυπική εργασία για τα προγράμματα είναι να αναζητήσουν μια τιμή που ορίζεται σε μια συμβολοσειρά περιβάλλοντος. Για παράδειγμα, τα περιεχόμενα της γραμμής PATH επιτρέπουν στα προγράμματα να χρησιμοποιούν διαδρομές αναζήτησης. Το παρακάτω πρόγραμμα δείχνει πώς να βρείτε συμβολοσειρές που δηλώνουν τυπικές διαδρομές αναζήτησης. Χρησιμοποιεί την τυπική συνάρτηση βιβλιοθήκης strstr(), η οποία έχει το ακόλουθο πρωτότυπο:

Char *strstr(const char *str1, const char *str2);

Η συνάρτηση strstr() αναζητά τη συμβολοσειρά που δείχνει η str1 στη συμβολοσειρά που δείχνει η str2. Εάν βρεθεί μια τέτοια συμβολοσειρά, επιστρέφεται ένας δείκτης στην πρώτη θέση. Εάν δεν βρεθούν αντιστοιχίες, η συνάρτηση επιστρέφει NULL.

/* το πρόγραμμα αναζητά μεταξύ των συμβολοσειρών περιβάλλοντος για μια γραμμή που περιέχει PATH */

#περιλαμβάνω
#περιλαμβάνω
int main (int argc, char *argv, char *env)
{
int t;
for(t=0; env[t]; t++)
{
if(strstr(env[t], "PATH"))
printf("%s\n", env[t]);
}
επιστροφή 0;
}

Οποιοδήποτε πρόγραμμα C ξεκινά με μια κλήση στη συνάρτηση main(). Αυτή η λειτουργία πρέπει να υπάρχει σε κάθε πρόγραμμα.

Όπως κάθε άλλη συνάρτηση, η συνάρτηση main() μπορεί να έχει παραμέτρους. Μερικές φορές κατά την εκκίνηση ενός προγράμματος είναι χρήσιμο να του δίνετε κάποιες πληροφορίες. Αυτές οι πληροφορίες μεταβιβάζονται στην main() χρησιμοποιώντας ορίσματα γραμμής εντολών. Επιχειρήματα γραμμής εντολών– πρόκειται για πληροφορίες που εισάγονται στη γραμμή εντολών μετά το όνομα του προγράμματος όταν το πρόγραμμα εκκινείται για εκτέλεση εκτός του περιβάλλοντος ανάπτυξης προγράμματος. Για παράδειγμα, για να ξεκινήσετε την αρχειοθέτηση του αρχείου task.cpp, πρέπει να πληκτρολογήσετε τα ακόλουθα στη γραμμή εντολών:

winrar ένα archTasktask.cpp // winrar.exe ένα archTasktask.cpp

όπου winrar είναι το όνομα του προγράμματος αρχειοθέτησης και οι γραμμές " ένα», « archTask" Και " έργο. cpp» αντιπροσωπεύει ορίσματα γραμμής εντολών που λένε στο πρόγραμμα να δημιουργήσει ένα αρχείο (" ένα") Με όνομα archTaskαπό ένα αρχείο έργο. cpp.

Όταν μεταβιβάζετε παραμέτρους στη συνάρτηση main(), πρέπει να ορίζεται ως εξής:

int main(int argc, char *argv) ( ) // ή void main(...)()

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

Η παράμετρος argv είναι ένας δείκτης σε μια σειρά δεικτών σε συμβολοσειρές. Σε αυτόν τον πίνακα, κάθε στοιχείο δείχνει στο επόμενο όρισμα γραμμής εντολών. Οι κενές αγκύλες υποδεικνύουν ότι ο πίνακας έχει αόριστο μήκος. Μπορείτε να αποκτήσετε πρόσβαση σε μεμονωμένα ορίσματα με ευρετηρίαση του πίνακα argv. Για παράδειγμα, το argv δείχνει την πρώτη συμβολοσειρά χαρακτήρων, η οποία είναι πάντα το όνομα του προγράμματος. Το argv επισημαίνει το πρώτο επιχείρημα και ούτω καθεξής. Η λίστα ορισμάτων περιορίζεται στο NULL, δηλ. argv == NULL.

Για να αποκτήσετε πρόσβαση σε έναν μεμονωμένο χαρακτήρα ενός από τα ορίσματα της γραμμής εντολών, πρέπει να χρησιμοποιήσετε το δεύτερο ευρετήριο στο argv. Δηλαδή, το πρώτο ευρετήριο argv παρέχει πρόσβαση στη συμβολοσειρά και το δεύτερο ευρετήριο παρέχει πρόσβαση στους μεμονωμένους χαρακτήρες του.

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

Ένα παράδειγμα προγράμματος με διαφορετικούς τρόπους μετατροπής αριθμών σε συμβολική μορφή σε ακέραιους και πραγματικούς αριθμούς:

#περιλαμβάνω

#περιλαμβάνω

// κατά την εκκίνηση ορίζουμε, για παράδειγμα, τα ακόλουθα ορίσματα: 100 2.7

void main(int a, char *b) (

k = strtol(b, &ptr, 10); // ptr = διεύθυνση του σφάλματος στη γραμμή

f = strtod(b, &ptr);

sscanf(b, "%d", &k);

sscanf(b, "%lf", &f);

Τα ονόματα argc και argv είναι παραδοσιακά, αλλά δεν απαιτούνται. Αυτές οι δύο παράμετροι στη συνάρτηση main() μπορούν να ονομαστούν όπως θέλετε.

Ένα απλό παράδειγμα χρήσης ορισμάτων γραμμής εντολών:

int main(int argc, char *argv) (

αν (argc != 4) (

printf("Μη έγκυρες παράμετροι εκκίνησης προγράμματος!\n");

k = atoi(argv); // μετατροπή της παραμέτρου αριθμού

printf("Γεια, %s από την ομάδα %s του %d έτους",

Εάν το όνομα του προγράμματος είναι task και το όνομά σας είναι "Vasya", ομάδα "PM-11" από το πρώτο έτος, τότε για να ξεκινήσετε το πρόγραμμα θα πρέπει να εισαγάγετε τη γραμμή εντολών:

εργασία Vasya PM-11 1

Ως αποτέλεσμα της εκτέλεσης του προγράμματος, θα εμφανιστεί το ακόλουθο μήνυμα στην οθόνη: "Γεια σου, Vasya από την ομάδα PM-11 1ου έτους."

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

Τα ορίσματα της γραμμής εντολών πρέπει να χωρίζονται με κενό. Εάν υπάρχουν κενά στο ίδιο το όρισμα, τότε για να μην μπορεί να κάνει πολλαπλά επιχειρήματα, αυτό το όρισμα πρέπει να περικλείεται σε διπλά εισαγωγικά. Ως αποτέλεσμα, ολόκληρη η συμβολοσειρά που αναφέρεται θα θεωρείται ως ένα όρισμα. Για παράδειγμα, το πρόγραμμα μπορεί να ξεκινήσει ως εξής: εργασία "Vasya and Petya" PM-21 2. Ως αποτέλεσμα της εκτέλεσης του προγράμματος, θα εμφανιστεί το μήνυμα στην οθόνη: "Γεια σας, Vasya και Petya από το 2ο έτος PM- 21 γκρουπ."

Τι είναι το char *argv; Αυτό ένας πίνακας του οποίου τα στοιχεία είναι δείκτες, αυτό είναι συστοιχία δεικτών. Αυτό σημαίνει ότι όταν μεταβιβάζετε παραμέτρους στην main(), μπορεί να οριστεί ως εξής:

void main(int argc, char **argv) (

Εργο. Εμφάνιση όλων των ορισμάτων της γραμμής εντολών (δεν χρειάζεται να εμφανιστεί το όνομα του προγράμματος).

#περιλαμβάνω

void main(int argc, char *argv)(

για (i = 1; i< argc; i++)

printf("%s\n", argv[i]);

Δεύτερη επιλογή ==================

#περιλαμβάνω

void main(int argc, char **argv)(

while((p=*argv) != NULL) (

printf("%s\n", p);

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

Όταν ένα πρόγραμμα δεν απαιτεί παραμέτρους γραμμής εντολών, η συνάρτηση main() χρησιμοποιεί τη λέξη-κλειδί void στη λίστα παραμέτρων του (ή απλά δεν καθορίζει τίποτα).

Τρόπος εντοπισμού σφαλμάτων ΠΡΟ ΧΡΙΣΤΟΥ. προγράμματα που απαιτούν ορίσματα γραμμής εντολών. Στο μενού Εκτέλεση→ Ορίσματα... πρέπει να εισαγάγετε ορίσματα γραμμής εντολών. Δεν χρειάζεται να προσδιορίσετε το όνομα του προγράμματος. Στη συνέχεια, μπορείτε απλά να εκτελέσετε και να διορθώσετε το πρόγραμμα στο περιβάλλον ανάπτυξης ως συνήθως.

Ανέστειλε το AdBlock σε αυτόν τον ιστότοπο.

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

Θυμηθείτε, μιλήσαμε για παραδείγματα προγραμματισμού, πιο συγκεκριμένα για δομημένο προγραμματισμό. Η κύρια ιδέα εκεί ήταν ότι οποιοδήποτε πρόγραμμα μπορεί να γραφτεί χρησιμοποιώντας μόνο τρεις βασικές δομές: follow, condition και loop. Τώρα θα προσθέσουμε μία ακόμη σε αυτές τις δομές - «υπορουτίνες» - και θα αποκτήσουμε ένα νέο παράδειγμα διαδικαστικός προγραμματισμός".

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

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

Πώς λειτουργούν οι λειτουργίες

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

Λίστα 1.

Int main(void)( // κεφαλίδα συνάρτησης // το σώμα της συνάρτησης είναι γραμμένο σε σγουρά άγκιστρα)

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

  • τύπος επιστροφής?
  • όνομα συνάρτησης.
  • ορίσματα συνάρτησης.

Πρώτον, ο τύπος επιστροφής γράφεται, για παράδειγμα, int , όπως στην κύρια συνάρτηση. Εάν μια συνάρτηση δεν πρέπει να επιστρέψει καμία τιμή στο πρόγραμμα, τότε η λέξη-κλειδί void γράφεται σε αυτό το μέρος. Φαίνεται ότι εφόσον η συνάρτηση δεν επιστρέφει τίποτα, τότε δεν χρειάζεται να γράψετε τίποτα. Παλαιότερα, παρεμπιπτόντως, αυτό γινόταν στη γλώσσα C, αλλά μετά το πρόσθεσαν για ομοιομορφία. Σήμερα, οι σύγχρονοι μεταγλωττιστές θα εκδίδουν προειδοποιήσεις/λάθη εάν δεν καθορίσετε έναν τύπο επιστροφής.
Σε ορισμένες γλώσσες προγραμματισμού, οι συναρτήσεις που δεν επιστρέφουν καμία τιμή ονομάζονται διαδικασίες (για παράδειγμα, Pascal). Επιπλέον, υπάρχουν διαφορετικές συντακτικές για τη δημιουργία συναρτήσεων και διαδικασιών. Δεν υπάρχει τέτοια διάκριση στη γλώσσα C.

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

Ας δούμε τις επικεφαλίδες των λειτουργιών που γνωρίζουμε ήδη.

Λίστα 2.

// μια συνάρτηση με όνομα srand που παίρνει έναν ακέραιο δεν επιστρέφει τίποτα void srand(int) // μια συνάρτηση με το όνομα sqrt που παίρνει πραγματικό float επιστρέφει ένα float float sqrt(float) // μια συνάρτηση με το όνομα rand που δεν παίρνει ορίσματα, επιστρέφει έναν ακέραιο αριθμό int rand(void) //μια συνάρτηση με το όνομα pow που παίρνει δύο ορίσματα τύπου double, επιστρέφει έναν πραγματικό αριθμό τύπου double double pow(double, double)

Πώς να δημιουργήσετε τη δική σας λειτουργία

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

Εικ.1 Αποσαφήνιση της δομής του προγράμματος. Δήλωση λειτουργιών.

Όπως μπορείτε να δείτε, υπάρχουν δύο μέρη όπου μπορεί να γίνει αυτό.

Ας δούμε ένα παράδειγμα που επεξηγεί τη δημιουργία μιας προσαρμοσμένης συνάρτησης για τον υπολογισμό του μέγιστου αριθμού δύο αριθμών.

Λίστα 3.

#περιλαμβάνω // δήλωση μιας προσαρμοσμένης συνάρτησης με το όνομα max_num // input: δύο ακέραιοι παράμετροι με το όνομα a και b // output: το μέγιστο από τα δύο ορίσματα int max_num(int a, int b)( int max = b; if (a > b) max = a; επιστροφή μέγ. x ,y); printf("max(%d,%d) = %d\n",x,y,m); επιστροφή 0; )

Επιτρέψτε μου να περιγράψω λεπτομερώς πώς θα λειτουργήσει αυτό το πρόγραμμα. Το σώμα της κύριας συνάρτησης εκτελείται. Δημιουργούνται οι ακέραιες μεταβλητές x, y και m. Οι μεταβλητές x και y διαβάζονται από το πληκτρολόγιο. Ας υποθέσουμε ότι εισάγαμε 3 5, μετά x = 3, y = 5. Όλα αυτά πρέπει να είναι ξεκάθαρα σε εσάς. Τώρα η επόμενη γραμμή

Λίστα 4.

M = max_num(x,y);

Η μεταβλητή m πρέπει να αντιστοιχιστεί σε αυτό που βρίσκεται στα δεξιά του σημείου =. Εκεί έχουμε το όνομα της συνάρτησης που δημιουργήσαμε μόνοι μας. Ο υπολογιστής αναζητά τη δήλωση και την περιγραφή αυτής της λειτουργίας. Βρίσκεται πάνω. Σύμφωνα με αυτή τη δήλωση, αυτή η συνάρτηση πρέπει να δέχεται δύο ακέραιες τιμές. Στην περίπτωσή μας, αυτές είναι οι τιμές που γράφονται στις μεταβλητές x και y. Εκείνοι. αριθμούς 3 και 5. Λάβετε υπόψη ότι δεν είναι οι ίδιες οι μεταβλητές x και y που μεταβιβάζονται στη συνάρτηση, αλλά μόνο οι τιμές (δύο αριθμοί) που αποθηκεύονται σε αυτές. Αυτό που πραγματικά μεταβιβάζεται σε μια συνάρτηση όταν καλείται σε ένα πρόγραμμα ονομάζεται πραγματικές παράμετροι της συνάρτησης.

Τώρα ξεκινά η εκτέλεση της συνάρτησης max_num. Το πρώτο βήμα είναι να δημιουργήσετε μια ξεχωριστή προσωρινή μεταβλητή για κάθε παράμετρο που περιγράφεται στην κεφαλίδα συνάρτησης. Στην περίπτωσή μας, δημιουργούνται δύο ακέραιες μεταβλητές με τα ονόματα a και b. Σε αυτές τις μεταβλητές εκχωρούνται οι τιμές των πραγματικών παραμέτρων. Οι ίδιες οι παράμετροι, που περιγράφονται στην κεφαλίδα συνάρτησης, ονομάζονται επίσημες παράμετροι. Έτσι, στις τυπικές παραμέτρους a και b εκχωρούνται οι τιμές των πραγματικών παραμέτρων 3 και 5, αντίστοιχα. Τώρα a = 3, b = 5. Περαιτέρω μέσα στη συνάρτηση μπορούμε να δουλέψουμε με αυτές τις μεταβλητές σαν να ήταν συνηθισμένες μεταβλητές.

Δημιουργείται μια ακέραια μεταβλητή με το όνομα max και της αποδίδεται η τιμή b. Στη συνέχεια, ελέγχεται η συνθήκη a > b. Εάν είναι αληθές, τότε η τιμή στη μεταβλητή max θα πρέπει να αντικατασταθεί με ένα .

Ακολουθεί η δήλωση return, η οποία επιστρέφει στο καλούν πρόγραμμα (την κύρια συνάρτηση) την τιμή που είναι γραμμένη στη μεταβλητή max, δηλ. 5 . Μετά από αυτό οι μεταβλητές a, b και max αφαιρούνται από τη μνήμη. Και επιστρέφουμε στη γραμμή

Λίστα 5.

M = max_num(x,y);

Η συνάρτηση max_num επέστρεψε την τιμή 5, που σημαίνει ότι τώρα υπάρχει 5 γραμμένο στα δεξιά του συμβόλου =. Αυτή η τιμή γράφεται στη μεταβλητή m. Στη συνέχεια εμφανίζεται η γραμμή στην οθόνη και το πρόγραμμα τελειώνει.

Διαβάστε ξανά προσεκτικά τις τελευταίες 4 παραγράφους για να κατανοήσετε πλήρως πώς λειτουργεί το πρόγραμμα.

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

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

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

Λίστα 6.

#περιλαμβάνω int max_num(int, int); int main(void) ( int x =0, y = 0; int m = 0; scanf("%d %d", &x, &y); m = max_num(x,y); printf("max(%d ,%d) = %d\n",x,y,m); return 0; ) int max_num(int a, int b)( int max = b; if (a > b) max = a; return max; )

Όλα είναι πολύ απλά. Λάβετε υπόψη ότι το πρωτότυπο της συνάρτησης δεν χρειάζεται να προσδιορίζει τα ονόματα των τυπικών παραμέτρων, αρκεί απλώς να υποδείξετε τους τύπους τους. Στο παραπάνω παράδειγμα, έκανα ακριβώς αυτό.