Δημοσιεύτηκε: 06 Ιούλ 2011, 00:01
Είναι λίγο πολύπλοκο!
Θα σου δώσω ένα πολύ απλό παράδειγμα, για να το καταλάβεις, το οποίο όμως στην πράξη δεν χρησιμοποιείται έτσι.
Έστω 2 αρχεία: main.c και secondary.c Το ένα από τα δυο πρέπει υποχρεωτικά να περιέχει την συνάρτηση main() (βασικά η main() μπαίνει ΜΟΝΑΧΑ σε ένα από όλα τα .c αρχεία).
Έστω λοιπόν πως το secondary.c είναι το εξής:
Για να χρησιμοποιήσεις την συνάρτηση sum() στο αρχείο main.c γράφεις κάτι σαν το παρακάτω:
Για να κάνεις compile τώρα και τα 2 αρχεία και να παραχθεί ένα εκτελέσιμο αρχείο, το κάνεις ως εξής:
και προφανώς τρέχεις το myprogram μετά για να δεις το πρόγραμμά σου.
Όταν έχεις ένα project με πολλά .c αρχεία, αντί να τα γράφεις κάθε φορά στο command line του gcc, φτιάχνεις ένα makefile κι όποτε θες να τα κάνεις compile γράφεις απλά:
ή αν το makefile σου το ονομάσεις π.χ.: mymakefile, γράφεις:
Γκούγκλαρε "makefile in c" για περισσότερες λεπτομέρειες.
Επίσης, το παραπάνω παράδειγμα είναι πολύ απλοποιημένο. Πρότυπα συναρτήσεων, τύπους δεδομένων, macros, directives, σταθερές, κλπ που σκοπεύεις να τα χρησιμοποιήσεις σε περισσότερα του ενός .c αρχείου τα βάζεις μέσα σε δικά σου header file (αρχεία με κατάληξη: .h) τα οποία μετά τα κάνεις #include (π.χ.: #include "myheader1.h") σε όσα .c αρχεία χρειάζεται.
Δες για παράδειγμα το πρόγραμμα της Ξερής που έχω ποστάρει στην ενότητα: Ανάπτυξη Λογισμικού... αποτελείται από 3 .c και 2 .h αρχεία (δες για παράδειγμα το stack.h που το κάνω include και στο stack.c και στο main.c)
Θα σου δώσω ένα πολύ απλό παράδειγμα, για να το καταλάβεις, το οποίο όμως στην πράξη δεν χρησιμοποιείται έτσι.
Έστω 2 αρχεία: main.c και secondary.c Το ένα από τα δυο πρέπει υποχρεωτικά να περιέχει την συνάρτηση main() (βασικά η main() μπαίνει ΜΟΝΑΧΑ σε ένα από όλα τα .c αρχεία).
Έστω λοιπόν πως το secondary.c είναι το εξής:
- Κώδικας: Επιλογή όλων
/***********************
* File: secondary.c
************************
*/
int sum( int x, int y)
{
return x+y;
}
Για να χρησιμοποιήσεις την συνάρτηση sum() στο αρχείο main.c γράφεις κάτι σαν το παρακάτω:
- Κώδικας: Επιλογή όλων
/***********************
* File: main.c
************************
*/
#include <stdio.h>
extern int sum(int, int); // το πρότυπο της sum() δηλωμένο ως extern (δηλαδή external)
// (στα πρότυπα αρκούν μονάχα οι τύποι των ορισμάτων, δεν χρειάζονται ονόματα)
int main( void )
{
int n1 = 10, n2 = 20;
printf("sum of %d and %d = %d\n", n1, n2, sum(n1, n2) );
return 0;
}
Για να κάνεις compile τώρα και τα 2 αρχεία και να παραχθεί ένα εκτελέσιμο αρχείο, το κάνεις ως εξής:
- Κώδικας: Επιλογή όλων
gcc main.c secondary.c -o myprogram
και προφανώς τρέχεις το myprogram μετά για να δεις το πρόγραμμά σου.
Όταν έχεις ένα project με πολλά .c αρχεία, αντί να τα γράφεις κάθε φορά στο command line του gcc, φτιάχνεις ένα makefile κι όποτε θες να τα κάνεις compile γράφεις απλά:
- Κώδικας: Επιλογή όλων
make
ή αν το makefile σου το ονομάσεις π.χ.: mymakefile, γράφεις:
- Κώδικας: Επιλογή όλων
make mymakefile
Γκούγκλαρε "makefile in c" για περισσότερες λεπτομέρειες.
Επίσης, το παραπάνω παράδειγμα είναι πολύ απλοποιημένο. Πρότυπα συναρτήσεων, τύπους δεδομένων, macros, directives, σταθερές, κλπ που σκοπεύεις να τα χρησιμοποιήσεις σε περισσότερα του ενός .c αρχείου τα βάζεις μέσα σε δικά σου header file (αρχεία με κατάληξη: .h) τα οποία μετά τα κάνεις #include (π.χ.: #include "myheader1.h") σε όσα .c αρχεία χρειάζεται.
Δες για παράδειγμα το πρόγραμμα της Ξερής που έχω ποστάρει στην ενότητα: Ανάπτυξη Λογισμικού... αποτελείται από 3 .c και 2 .h αρχεία (δες για παράδειγμα το stack.h που το κάνω include και στο stack.c και στο main.c)