Εργαστήριο 1ο Εισαγωγή στο προγραμματιστικό περιβάλλον ANSI Σε αυτό το κεφάλαιο θα ασχοληθούμε με την περιγραφή της διαδικασίας μεταγλώττισης ενός προγράμματος C κάνοντας χρήση του μεταγλωττιστή gcc σε περιβάλλον Linux ή στον εξομοιωτή τερματικού Cygwin στα windows. Στάδια ανάπτυξης ενός προγράμματος Τα στάδια ανάπτυξης ενός προγράμματος C είναι η δημιουργία, η μεταγλώττιση και η εκτέλεση. Παρακάτω βλέπουμε αναλυτικά καθένα από αυτά. Δημιουργία Δημιουργείτε ένα αρχείο που περιέχει ένα πλήρες πρόγραμμα. Μπορείτε να χρησιμοποιήσετε οποιοδήποτε συντάκτη κειμένου γνωρίζετε. Παραδείγματα τέτοιων συντακτών σε Linux είναι οι vi, gvim, gedit, kedit. Καθώς και πιο εξελιγμένη όπως ο Notepad++ και ο sublime. Ένα πρόγραμμα πηγαίου κώδικα σε c θα πρέπει να τελειώνει σε κατάληξη ''.c'', π.χ. myprog.c. Μεταγλώττιση Υπάρχουν αρκετοί μεταγλωττιστές της C. Ο GNU μεταγλωττιστής C gcc είναι δημοφιλής και διαθέσιμος σε πολλές πλατφόρμες. Στο Linux συνήθως υπάρχουν διαθέσιμα διάφορα συνώνυμα όπως cc, c++, g++ καθώς και τα c89, c99 (που ακολουθούν το αντίστοιχα ANSI πρότυπα) και o προεπεξεργαστής cpp. Η καλύτερη πηγή πληροφόρησης είναι οι σελίδες εγχειριδίου του μεταγλωττιστή, δηλαδή εισάγουμε την εντολή man gcc είτε info gcc ή χρησιμοποιούμε την γραφική διεπαφή λήψης βοήθειας του συστήματος. Επίσης, υπάρχει δυνατότητα πρόσβασης στο online εγχειρίδιο στην παρακάτω διεύθυνση, http://www.gnu.org/software/gcc/ Για τη μεταγλώττιση απλά καλούμε το μεταγλωττιστή με την εντολή gcc ακολουθούμενη από το όνομα του προς μεταγλώττιση προγράμματος. Ο μεταγλωττιστής διαθέτει πληθώρα επιλογών, δείτε τις σελίδες εγχειριδίου για λεπτομέρειες. Η απλούστερη λοιπόν μορφή είναι: gcc program.c όπου program.c είναι το όνομα του αρχείου κειμένου του προγράμματος. 1
Αν υπάρχουν προφανή συντακτικά λάθη στο πρόγραμμα, ο μεταγλωττιστής τα αναγνωρίζει και τα εμφανίζει στην πρότυπη έξοδο. Φυσικά, υπάρχουν σφάλματα που ο μεταγλωττιστής δεν μπορεί να αναγνωρίσει, όπως τα λογικά σφάλματα. Αν η μεταγλώττιση είναι επιτυχής, το εκτελέσιμο αποθηκεύεται στον τρέχοντα κατάλογο με όνομα a.out εκτός αν χρησιμοποιηθεί η επιλογή - o : τότε χρησιμοποιείται το όνομα που ακολουθεί τη επιλογή - o. Είναι πιό βολικό να χρησιμοποιούμε την επιλογή - o όπως, gcc - o program program.c που θέτει το εκτελέσιμο στο αρχείο program (ή οτι όνομα βάλετε μετά το όρισμα "- o") αντί για το αρχείο a.out. Εκτός από τη λύση της γραμμής εντολών, υπάρχουν αρκετά IDE's (Integrated Development Environments). Παραδείγματα τέτοιων προγραμμάτων είναι τα, MS Visual Studio Eclipse, https://www.eclipse.org/ QTCreator, http://en.wikipedia.org/wiki/qt_creator Dev C++, http://www.bloodshed.net/devcpp.html Codelite, http://codelite.org/ κ.α. Στην παρακάτω εικόνα φαίνεται ένα στιγμιότυπο του περιβάλλοντος ανάπτυξης προγραμμάτων σε C, Codelite. Τα περιβάλλοντα αυτά παρέχουν εκτενή εγχειρίδια και online help, των οποίων η ανάλυση ξεφεύγει από τους σκοπούς αυτού του κειμένου. Πολλά από αυτά τα περιβάλλοντα αναγνωρίζουν την ύπαρξη της gcc και τη χρησιμοποιούν ως back- 2
end. Έτσι τα περισσότερα που αναφέρονται στο κείμενο μπορούν να επιτευχθούν και μέσω των IDE's. Εμείς στο παρόν εργαστηριακό σύγγραμμα αλλά και σε όλα τα εργαστήρια του εξαμήνου θα ασχοληθούμε με τη χρήση μόνο του μεταγλωττιστή gcc μέσω της γραμμής εντολών του UNIX/Linux (και του εξομοιωτή Cygwin για περιβάλλον Windows). Εκτέλεση Το επόμενο στάδιο είναι η εκτέλεση του εκτελέσιμου. Στο UNIX / Linux, απλά εισάγουμε στη γραμμή εντολής το όνομα του εκτελέσιμου program (ή a.out). Για να τρέξεμε το πρόγραμμα που έχει προκύψει θα γράψετε στην γραμμή εντολών,./program ή./a.out Κατά την εκτέλεση του προγράμματος τα αποτελέσματα εμφανίζονται στην πρότυπη έξοδο (οθόνη). Σε περίπτωση λογικών σφαλμάτων ή συντακτικών σφαλμάτων θα λάβετε λάθος ή καθόλου έξοδο. Σε αυτή την περίπτωση επιστρέφουμε στο κείμενο του προγράμματος, διορθώνουμε, μεταγλωττίζουμε ξανά, και εκτελούμε το νέο εκτελέσιμο. Παρακάτω παραθέτουμε, μέσω εικόνων, τα στάδια ανάπτυξης ενός προγράμματος στη C, με χρήση του μεταγλωττιστή gcc. 1. Άνοιξε ένα τερματικό στο Linux (ή το Cygwin στα Windows). Γράψε την εντολή gcc version για να ελέγξεις αν υπάρχει εγκατεστημένο το gcc στον υπολογιστή σου. 2. Δημιούργησε ένα φάκελο εργασίας Στο παράδειγμα της παραπάνω εικόνας γίνεται δημιουργία φακέλου με το όνομα CCPP με χρήση της εντολής mkdir. 3
3. Είσοδος στο φάκελο που δημιουργήσαμε παραπάνω 4. Κάνουμε χρήση ενός επεξεργαστή κειμένου όπως nano, gedit, vi, notepad++, sublime για παράδειγμα. Τα δύο τελευταία είναι και σε περιβάλλον windows. (α) Έναρξη του επεξεργαστή nano (Linux) (β) Έναρξη του επεξεργαστή gedit (Linux, gnome GUI) (γ) Έναρξη του επεξεργαστή notepad (Windows) 5. Εισάγουμε τον κώδικα του προγράμματος και αποθηκεύουμε το αρχείο 4
6. Κάνουμε μεταγλώττιση του προγράμματος που εισαγάγαμε παραπάνω 7. Εκτέλεση του εκτελέσιμου αρχείου που έχει προκύψει. Ασκήσεις 1. Εισάγετε, μεταγλωττίστε και εκτελέστε το ακόλουθο πρόγραμμα: #include <stdio.h> main() { int i; printf("\t Number \t\t Square of Number\n\n"); for (i=0; i<=25;++i) printf("\t %d \t\t\t %d \n",i,i*i); } 2. Το παρακάτω πρόγραμμα χρησιμοποιεί βιβλιοθήκη μαθηματικών. Εκτελέστε το σωστά. #include <stdio.h> #include <math.h> main() { int i; printf("\t Number \t\t Square Root of Number\n\n"); for (i=0; i<=360; ++i) printf("\t %d \t\t\t %f \n",i, sqrt((double) i)); } 5