Λειτουργικά Συστήματα

Σχετικά έγγραφα
Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Κεφάλαιο : Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμό για ΗΜΥ

Περιεχόμενα. Πρόλογος... 17

Αντικειµενοστρεφής Προγραµµατισµός

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Συστημάτων

Αντικειμενοστρεφής Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Περιεχόμενα. Πρόλογος... 21

3 &4. Εισαγωγήστη C Ιωάννης Κατάκης

Εισαγωγή ΕΙΣΑΓΩΓΗ. Γεώργιος Παπαϊωάννου ( )

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Προγραμματισμός Συστημάτων

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

Προγραμματισμός Συστημάτων

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Ηλεκτρονικοί Υπολογιστές

Η γλώσσα προγραμματισμού C

Οντοκεντρικός Προγραμματισμός

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

Αντικειμενοστρεφής Προγραμματισμός

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Αντικειμενοστραφής Προγραμματισμός

Γεώργιος Δημητρίου Προσαρμογή Εισαγωγικού Μαθήματος από Prof. Stephen A. Edwards (Columbia University)

Βασικά Στοιχεία της Java

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Ενδεικτική περιγραφή μαθήματος

Εισαγωγή στον Προγραμματισμό

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Διαδικτύου

B. Ενσωμάτωση Ιθαγενών Μεθόδων

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Βασικά Στοιχεία της Java

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Δομημένος Προγραμματισμός

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Κεφάλαιο 1 Εισαγωγή στη C

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Δεδομένα, Τύποι και Τιμές

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

3. Εκφράσεις και έλεγχος ροής

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή στην Πληροφορική

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον δομημένο προγραμματισμό

Αντικειμενοστραφής Προγραμματισμός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Στοιχειώδης προγραμματισμός σε C++

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ (ΤΛ2007 )

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Δομημένος Προγραμματισμός (ΤΛ1006)

Ειδικά Θέματα Προγραμματισμού

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Οντοκεντρικός Προγραμματισμός

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 3 : Γλώσσες προγραμματισμού. Δρ.

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

Γενικά (για τις γραπτές εξετάσεις)

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

Διδάσκων: Δημήτριος Βαρσάμης

Γλώσσα Προγραμματισμού C

Βασικές Αρχές Προγραμματισμού

Transcript:

Λειτουργικά Συστήματα Φροντιστηριακή ενότητα # 1: Εισαγωγή στη γλώσσα C για γνώστες της γλώσσας Java Τμήμα: Πληροφορικής

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Οικονομικό Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. 3

Σκοποί ενότητας Διαφορές, ομοιότητες και «ιδιαιτερότητες» σε σχέση με τη γλώσσα προγραμματισμού Java. Αναφορές και στη C++ όπου κρίνεται σκόπιμο. Δείκτες για διαχείριση της μνήμης. Πλεονεκτήματα της C για το προγραμματισμό συστημάτων. Βασικά πρακτικά παραδείγματα κώδικα. Μεταγλώττιση προγραμμάτων σε C. 4

Περιεχόμενα ενότητας Εισαγωγή Βασικές διαφορές από τη γλώσσα Java Στοιχεία της γλώσσας C με παραδείγματα Μεταγλώττιση 5

Εισαγωγή Μάθημα: Λειτουργικά Συστήματα, Φροντιστηριακή Ενότητα # 1: Προγραμματισμός με τη γλώσσα C για γνώστες της γλώσσας Java Τμήμα: Πληροφορικής

Προτεινόμενα συγγράμματα (1 από 2) Βιβλία The C Programming Language από τους Brian W. Kernighan, Dennis M. Ritchie C Programming: A Modern Approach από τον K. N. King The C Puzzle Book από τον Feuer C for Dummies Vol. I του Dan Gookin C for Dummies Vol. ΙΙ 7

Προτεινόμενα συγγράμματα (2 από 2) Παραδείγματα online Ίσως σας βοηθήσουν επερωτήματα σύγκρισης με τη Java Συνιστάνται ιδιαίτερα: Wikibooks C for Java programmers του J. Maasen Του Niranjan Nagarajan Top tips to help the Java programmer code in C 8

Ιστορική αναδρομή (1 από 2) 1972 (Dennis Ritchie) Προήλθε από τις γλώσσες B και BCPL Τυποποιήθηκε στο διάστημα 1983-1989 ANSI C ή C89 C99 και C11 Η σύνταξη της C αποτελεί τη βάση για τις γλώσσες C++, C#, Objective C και Java Η C++ είναι ουσιαστικά επέκταση της C στον αντικειμενοστρεφή προγραμματισμό 9

Ιστορική αναδρομή (2 από 2) Οι ειδικοί/έμπειροι προγραμματιστές συνιστούν, η C++ και η θα πρέπει να αντιμετωπίζονται ως δυο διαφορετικές γλώσσες Όχι μεικτός κώδικας C και C++ Όχι πρακτικές της C στη C++ 10

Σχέση με το Unix/Linux Η C αναπτύχθηκε παράλληλα με το Unix Αρχικά η ανάπτυξη του Unix ήταν σε assembly Πολύ αργή ανάπτυξη κώδικα Κώδικας γραμμένος για συγκεκριμένη αρχιτεκτονική συστήματος (μηχάνημα) Πλεονεκτήματα της ανάπτυξης του Unix/Linux σε C Φορητότητα (portability) Ευκολία και ταχύτητα ανάπτυξης, π.χ: Δομές επανάληψης, κλήσεις συναρτήσεων και έτοιμων βιβλιοθηκών.. 11

Βασικές διαφορές από τη γλώσσα Java Μάθημα: Λειτουργικά Συστήματα, Φροντιστηριακή Ενότητα # 1: Προγραμματισμός με τη γλώσσα C για γνώστες της γλώσσας Java Τμήμα: Πληροφορικής

Διαδικαστικές και Αντικειμενοστραφείς γλώσσες (1 από 2) Η γλώσσα C δεν είναι αντικειμενοστραφής Δεν υπάρχουν Κλάσεις, άρα ούτε αντικείμενα Διεπαφές (interfaces) Πακέτα βιβλιοθηκών κλάσεων Πολυμορφισμός (polymorphism) Ενθυλάκωση (encapsulation) Μέθοδοι (?), Κληρονομικότητα, σχέσεις Is-A, Has-A, κ.ο.κ. 13

Διαδικαστικές και Αντικειμενοστραφείς γλώσσες (2 από 2) Η γλώσσα C είναι διαδικαστική (procedural) Τα προγράμματα δομούνται μόνο από συναρτήσεις (C functions) Οι συναρτήσεις δρούν (ρητά) μόνο επί των δεδομένων πάνω στα οποία καλούνται Ερώτηση: Ποια η διαφορά από τις μεθόδους μιας αντικειμενοστραφούς γλώσσας; Υπάρχουν δομές ή πρακτικές που δεν απαντώνται στη Java: structs, unions, δείκτες (pointers) ακόμη και void δείκτες.. 14

Χειρισμός «εξαιρέσεων» / λαθών Δεν υπάρχει μηχανισμός διαχείρισης εξαιρέσεων (exceptions) Αυτό είναι χαρακτηριστικό των αντικειμενοστραφών γλωσσών όπως η Java και η C++ Υπάρχει βιβλιοθήκη αναγνώρισης λαθών http://www.tutorialspoint.com/cprogramming/c_ error_handling.htm 15

Διαφορές στην οργάνωση και τη δομή (1 από 3) Java 1. Κώδικας σε κλάσεις Κατά προτίμηση ένα αρχείο ανά κλάση Πεδία, μέθοδοι, και αναφορές οργανωμένα σε κλάσεις C 1. Κώδικας σε διάφορες συναρτήσεις Δηλώσεις και ορισμοί συναρτήσεων οργανώνονται σε (πολλά) αρχεία κεφαλίδας και πηγαίου κώδικα (header and source files) Ίδια λογική, θέματα και λύσεις με τη C++ 16

Διαφορές στην οργάνωση και τη δομή (2 από 3) Java 2. Εκτέλεση βασικού νήματος μέσα σε μια κλάση C 2. Εκτέλεση μιας main συνάρτησης από ένα από τα αρχεία κώδικα public static void main(string []args){ System.out.println("Hello World"); } int main(int argc, char** argv){ printf("hello World"); return 0; } 17

Διαφορές στην οργάνωση και τη δομή (3 από 3) Java 3. Σύνδεση + Κλήσεις βιβλιοθηκών κώδικα από jar αρχεία jar: java archive σε μορφή zip Συμπιεσμένος εκτελέσιμος κώδικας import java.io.*; import my.external.lib. *; C 3. Σύνδεση (linking) με εξωτερικό κώδικα Αρχεία κεφαλίδας Ο εκτελέσιμος κώδικας συνδέεται χωριστά #include <stdio.h> #include my_header.h 18

Βασικά αρχεία κεφαλίδας Αρχείο stdio.h stdlib.h math.h string.h time.h Εξήγηση / αντιστοιχία java.io.* std. συναρτήσεις και μακροεντολές java.lang.math java.lang.string System. currenttimemillis(); 19

Μήκη αριθμητικών τύπων (1 από 2) Java Το μέγεθος των βασικών τύπων είναι γνωστό: int: 32 bits short: 16 bits long: 64 bits float: 32 bits double: 64 bits byte: 8 bits char: 16 bits Το μέγεθος δεν είναι δεδομένο. Εξαρτάται από: C Το μεταγλωττιστή Την πλατφόρμα για την οποία έχει γίνει η μεταγλώττιση Βλ. παράδειγμα κώδικα με sizeof() (Εργαστήριο) 20

Μήκη αριθμητικών τύπων (2 από 2) long long: υπάρχει ανεπίσημα: 64 bits long double: υπάρχει ανεπίσημα: 96 bits Χρήση του unsigned int i; // -2^31 έως 2 31-1 signed int i; // -2 31 έως 2 31-1 unsigned int i; // 0 έως 2 32-1 21

Θέματα διαχείρισης μνήμης Τίποτα δεν διαχειρίζεται/ελέγχεται αυτόματα σε ότι αφορά τη μνήμη! Όμοια με τη C++, η C δεν διαθέτει: Διαχείριστή «σκουπιδιών» μνήμης αντίστοιχου του java garbage collector System.gc() Όρια πινάκων, έλεγχο προσπέλασης μνήμης με δείκτες, έλεγχο καλουπώματος (casting) τύπων Επιπλέον, σε αντίθεση με τη C++, δεν έχει: Λογικές μεταβλητές, δηλαδή, τύπου bool Διαχείριση strings ως πίνακες χαρακτήρων. 22

Αναφορές Java και δείκτες της C/C++ (1 από 2) Προσοχή! Η έννοια της αναφοράς (reference) στη Java είναι κοντά στην έννοια του C pointer και όχι στην έννοια της αναφοράς στη C++ «Ατυχής» ομοιότητα στην ορολογία Ο πιο απλός τρόπος να ορίσεις τους δείκτες της C/C++: Ό,τι είναι μια αναφορά στη Java (δείχνει κάπου στη μνήμη) Με επιπλέον τη δυνατότητα των αριθμητικών πράξεων (βλ. συνέχεια) 23

Αναφορές Java και δείκτες της C/C++ (2 από 2) Δυνατότητα να αλλάξεις τη τιμή του δεικτη Δηλαδή, την αριθμητική διεύθυνση στη μνήμη Αύξηση του δείκτη, πολλαπλάσιασμός, διαίρεση.. Πολύ σύνηθες, πχ στους πίνακες Όλα επιτρέπονται! (δυστυχώς και ευτυχώς) Πολλές δυνατότητες και.. Πολλές «ευκαιρίες» για λάθη που δύσκολα εκσφαλματώνονται (debugging) 24

C ή Java; Προτιμούμε τη C όταν πρέπει να γίνουν όλα στο χαμηλότερο επίπεδο λεπτομέρειας Πλήρης έλεγχος και ανάγκη για αποδοτικό / ταχύ κώδικα σε κρίσιμα τμήματα, π.χ. για επικοινωνία.. αλλά και πολλή περισσότερη προγραμματιστική δουλειά Δυνατότητα κλήσεων κώδικα σε assembly Παραδείγματα: Οδηγοί συσκευών (drivers) Λειτουργικά συστήματα όπως το Linux 25

Στοιχεία της Γλώσσας C με παραδείγματα Μάθημα: Λειτουργικά Συστήματα, Φροντιστηριακή Ενότητα # 1: Προγραμματισμός με τη γλώσσα C για γνώστες της γλώσσας Java Τμήμα: Πληροφορικής

Δεσμευμένες λέξεις-κλειδιά (1 από 3) double float int short long if else switch default case while do for break continue void char return 27

Δεσμευμένες λέξεις-κλειδιά (2 από 3) struct union signed unsigned enum typedef extern static sizeof struct <> class *όχι* πολυμορφισμός C++: public vs. private union Vs. struct 28

Δεσμευμένες λέξεις-κλειδιά (3 από 3) auto register goto volatile Why is goto bad? E. Djikstra s A case against the goto statement 29

«Ιδιαιτερότητες» byte: Δεν υπάρχει. Χρήση char => 8 bits bool: Δεν υπάρχει. Χρήση int.. 0 για false. Οποιαδήποτε άλλη τιμή εκτός του 0, εκλαμβάνεται ως true. if (0) {// δεν εκτελείται}. while(!0) {/*εκτελείται για πάντα*/} if (a = 0) { /*δεν εκτελείται ποτέ*/ } Παραδείγματα με αληθείς αποτιμήσεις: 1 && 0 == 0 1 && -1 == 1 7 25 == 1 (!3 == 0) ==!0 30

«Ιδιαιτερότητες» if (y = -1) { /*εκτελείται πάντα*/ } int x = 1; int y = 2; while (x && y) { /* εκτελείται για πάντα*/ } while (x & y) { /* ποτέ δεν εκτελείται, γιατί;*/ } Περισσότερα περί τελεστών εδώ int i = 3; while (--i) { /* εκτελείται 2 φορες*/ } int j /*σκουπίδια*/; while (--j) { /* εκτελείται άγνωστες φορες*/ } 31

«Ιδιαιτερότητες» Λάθος δήλωση μεταβλητών 1. void foo(){ 2. int i; 3. i=5; 4. int j=9; // η δήλωση // πρέπει να είναι // στην αρχή! 5. } Ορθή δήλωση μεταβλητών 1. void loop (){ 2. int lim, i; 3. lim = 10; 4. for (i=0; i<lim;i++) {..} 5. } Προσοχή! Το παραπάνω ισχύει γενικά, π.χ. για τις δομές επανάληψεις.. 32

Εμβέλεια μεταβλητών (1 από 2) 1. int global; // εντός του αρχείου.c 2. void fοο(){ 3. int local; 4. } 33

Εμβέλεια μεταβλητών (2 από 2) 1. extern int global; // δηλωμένο σε 2. // άλλο αρχείο.c 3. static int prvtglobal; // τοπικά 4. // global στο παρόν αρχείο.c 5. void fοο(){ 6. int local; 7. } 34

Μεταγλώττιση Μάθημα: Λειτουργικά Συστήματα, Φροντιστηριακή Ενότητα # 1: Προγραμματισμός με τη γλώσσα C για γνώστες της γλώσσας Java Διδάσκων φροντιστηρίου: Ξενοφών Βασιλάκος, Τμήμα: Πληροφορικής

Hello World! /* HelloWorld.c */ 1. #include <stdio.h> 2. 3. int main(int argc, char** argv){ 4. printf( Hello %s\n", World! ); 5. return 0; 6. } 36

GCC gcc -Wall HelloWorld.c Το εκτελέσιμο που προκύπτει είναι το a.out Για την εκτέλεση του προγράμματος:./a.out Πηγές εκπαιδευτικού υλικού GCC http://matrixprogramming.com/2008/03/compilelink http://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make. html http://www.givemefish.com/articlesandbook/cheatsheets/givemefis h_gcc_cheatsheet.php 37

./a.out Hello World! /* PrintArgs.c */ 1. #include <stdio.h> 2. 3. int main(int argc, char** argv){ 4. int i; 5. for (i=0; i<argc; i++){ 6. printf("arg[%d]:%s\n", i, argv[i]); 7. } 8. return 0; 9. } 38

./a.out Hello World! 1. #include <stdio.h> 2. /* PrintArgs.c */ 3. int main(int argc, char** argv){ 4. int i; 5. for (i=0; i<argc; i++){ 6. printf("arg[%d]:%s\n", i, argv[i]); 7. } 8. return 0; 9. } > gcc -Wall PrintArgs.c >./a.out Hello World! 39

GCC gcc -Wall PrintArgs.c Για την εκτέλεση του προγράμματος:./a.out Hello World! Αποτέλεσμα εκτέλεσης προγράμματος arg[0]:./a.out arg[1]: Ηello arg[2]: World! 40

Προεπεξεργαστής (Preprocessor) #include Για να γίνει εισαγωγή από τον προεπεξεργασή των δηλώσεων των συναρτήσεων. Τα τρία βήματα της μεταγλώττισης 1. Προεπεξεργαστής (πχ #include, #if, #elif, #ifndef 2. Μεταγλωττιστής (*.o αρχείο στην έξοδο) 3. Σύνδεση. O linker συνδέει με βιβλιοθήκες.c,.h 1. Preprocessor.i,.ii 2. Compiler.s Assembler.o 3. Linker.exe 41

Τέλος Φροντιστηριακής Ενότητας # 1 Μάθημα: Λειτουργικά Συστήματα, Φροντιστηριακή Ενότητα # 1: Προγραμματισμός με τη γλώσσα C για γνώστες της γλώσσας Java, Τμήμα: Πληροφορικής