Αρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )

Σχετικά έγγραφα
Προγραμματισμός Ι (ΗΥ120)

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

Προγραμματισμός Ι (ΗΥ120)

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Προγραμματισμός Ι (ΗΥ120)

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

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

Προγραμματισμός Ι (ΗΥ120)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο8

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

Προγραμματισμός σε C. Πράξεις με bits (bitwise operators)

Προγραμματισμός Ι (HY120)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

Προγραμματισμός Ι (ΗΥ120)

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

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

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

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

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

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (HY120)

Προγραµµατισµός Ι (ΗΥ120)

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

Διάλεξη 15η: Αναδρομή, μέρος 1ο

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

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

Προγραμματισμός ΙI (E)

Προγραμματισμός Ι (ΗΥ120)

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ

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

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

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

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

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

Προγραμματισμός Ι (ΗΥ120)

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

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

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

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

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

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Εργαστήριο 10 Κλάσεις

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εργαστήριο 2: Πίνακες

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

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

Προγραμματισμός Ι (ΗΥ120)

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

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

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

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

ΣΧΕΔΙΟΤΥΠΑ (TEMPLATES)

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

Προγραμματισμός Ι (ΗΥ120)

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία (Κεφάλαιο , KNK-2ED)

Αλγόριθμοι Ταξινόμησης Μέρος 1

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Μερικές χρήσιμες οδηγίες

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

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

Προγραμματισμός Ι (ΗΥ120)

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

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

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

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Προγραμματισμός Ι (ΗΥ120)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Δομές Δεδομένων και Αλγόριθμοι

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

είκτες και Πίνακες (2)

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

Ενδεικτικές λύσεις και στατιστικά

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

Transcript:

ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ Γεώργιος Παπαϊωάννου (2013 14) gepap@aueb.gr

Περιγραφή: Πολλαπλά αρχεία κώδικα Αρχεία κεφαλίδων Τελευταία ενημέρωση: Ιούλιος 2013 Εισαγωγή 2

Στη C/C++ τον κώδικά μας τον οργανώνουμε συνήθως σε αρχεία, ανάλογα με εννοιολογικό διαχωρισμό, ή με βάση τις κλάσεις Τις ελεύθερες συναρτήσεις τις οργανώνουμε σύμφωνα με τη λειτουργία τους (π.χ. I/O, μαθηματικά, επεξ. πινάκων κλπ) Τις κλάσεις τις βάζουμε σε ένα αρχείο υλοποίησης για κάθε αυτόνομη κλάση Γιατί; Στη C++ δεν έχουμε την υποχρέωση να χωρίσουμε τον κώδικά μας όπως στη Java, αλλά: Γίνεται ο κώδικας πιο αρθρωτός και επαναχρησιμοποιήσιμος Γίνεται ο κώδικας πιο ευανάγνωστος Δε χρειάζεται να κάνουμε τα πάντα compile για μια μικρή αλλαγή 3

mymath.cpp float dotproduct(float* a, float* b){ if (!a!b) return 0.f; return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; bool iszero(float* a){ return a==nullptr? true : a[0]==.0f && a[1]==.0f && a[2]==.0f; application.cpp #include <iostream> int main(int argc, char *argv[]){ float v1[] = {1.f, 0.f, 0.f; float v2[] = {2.f, 1.f, 0.f; std::cout << dotproduct(v1,v2); return 0; gcc o application.exe mymath.cpp application.cpp 4

Τα αρχεία κεφαλίδων είναι αρχεία στα οποία ξεχωρίζουμε τις δηλώσεις συναρτήσεων, τύπων, μακροεντολών κλπ ώστε: Τα αρχεία κώδικα.c,.cpp.c++ να περιέχουν μόνο υλοποιήσεις συναρτήσεων και μεθόδων Να μπορούμε να κάνουμε Include τα αρχεία κεφαλίδων σε πολλαπλά αρχεία υλοποίησης κώδικα 5

mymath.h float dotproduct(float* a, float* b); bool iszero(float* a); mymath.cpp float dotproduct(float* a, float* b){ if (!a!b) return 0.f; return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; application.cpp #include <iostream> int main(int argc, char *argv[]){ float v1[] = {1.f, 0.f, 0.f; float v2[] = {2.f, 1.f, 0.f; std::cout << dotproduct(v1,v2); return 0; bool iszero(float* a){ return a==nullptr? true : a[0]==.0f && a[1]==.0f && a[2]==.0f; gcc o application.exe mymath.cpp application.cpp 6

mymath.h float dotproduct(float* a, float* b); inline bool iszero(float* a){ return a==nullptr? true : a[0]==.0f && a[1]==.0f && a[2]==.0f; mymath.cpp float dotproduct(float* a, float* b){ if (!a!b) return 0.f; return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; application.cpp #include <iostream> int main(int argc, char *argv[]){ float v1[] = {1.f, 0.f, 0.f; float v2[] = {2.f, 1.f, 0.f; std::cout << dotproduct(v1,v2); return 0; Τις συναρτήσεις inline τις ορίζουμε στο αρχείο κεφαλίδας, γιατί απαιτείται να ορίζονται ξανά σε κάθε αρχείο.cpp! 7

Δηλώσεις συναρτήσεων. Ορισμοί συναρτήσεων inline. Ορισμοί κλάσεων (επόμενες διαλέξεις). Σχεδιότυπα (templates επόμενες διαλέξεις). Ορισμοί δομών, δηλώσεις καθολικών μεταβλητών και καθολικών σταθερών (τελευταίες διαλέξεις) Ό,τι άλλο χρειάζεται κάποιος για να χρησιμοποιήσει το αντίστοιχο αρχείο.cpp. 8

Πολύ συχνά κεφαλίδες καλούνται μέσα από άλλες κεφαλίδες, συνδυάζοντας λειτουργίες Αν σε κάποιο σημείο μια κεφαλίδα καλείται πάνω από μια φορά, θα έχουμε διπλές δηλώσεις! geometry.h : float projection(float * base, float * vec); signals.h : void findcoefs(float* coefs, float* params); MyProg.cpp : #include geometry.h #include signals.h Πρόβλημα: Διπλές δηλώσεις των περιεχομένων του mymath.h 9

Δηλώνουμε όλο το περιεχόμενο του αρχείου κεφαλίδας μέσα σε: #ifndef _Kapoio_monadiko_onoma_ #define _Kapoio_monadiko_onoma_ [Κώδικας κεφαλίδας] #endif Όσες φορές και να γίνει #include το παραπάνω αρχείο, ο κώδικας μέσα στο #ifndef #endif θα διαβαστεί από τον προεπεξεργαστή μόνο μια φορά Ισοδύναμη δήλωση προεπεξεργαστή: #once 10

mymath.h #ifndef _MYMATH_ #define _MYMATH_ float dotproduct(float* a, float* b); bool iszero(float* a); #endif Ισοδύναμα: (δεν υποστηρίζεται από όλους τους μεταγλωττιστές, ειδικά παλιότερους) #once float dotproduct(float* a, float* b); bool iszero(float* a); geometry.h : float projection(float * base, float * vec); signals.h : void findcoefs(float* coefs, float* params); MyProg.cpp : #include geometry.h #include signals.h Εδώ το _MYMATH_ έχει ήδη δηλωθεί, οπότε δε θα μπει στο #define#endif της mymath.h 11