Προς το περιεχόμενο

Πρόγραμμα C και αρχεία πηγαίου κώδικα.


acid18

Προτεινόμενες αναρτήσεις

Δημοσ.

Ετοιμάζομαι να αρχίσω ένα μεγάλο project (για τη σχολή) αυτές τις μέρες και θα ήθελα να ρωτήσω αν χωρισμός του πηγαίου κώδικα σε αρχεία έχει πλεονεκτήματα ή να το κρατήσω ένα αρχείο με όλο τον κώδικα?

Δημοσ.

Αν και η C δεν έχει κλάσεις για να βάζεις κάθε κλάση σε ξεχωριστό compilation unit (όχι πως είναι κατ' ανάγκην απαραίτητο αυτό, ακόμη και σε γλώσσες που έχει νόημα), το να χωρίσεις τον κώδικά σου σε περισσότερα του ενός αρχεία μπορεί να βοηθήσει στα εξής:

 

1. Καλύτερη λογική οργάνωση του κώδικα: Αντί για ένα τεράστιο αρχείο, μπορείς να ομαδοποιείς συναρτήσεις και custom τύπους δεδομένων βάσει συνάφειας. Π.χ. αν στο project σου φτιάχνεις και έναν parser, μπορείς να βάλεις τα στοιχεία που τον αποτελούν σε ένα ξεχωριστό compilation unit

2. Όσο πιο μεγάλο το project, τόσο περισσότερο χρόνο θα εξοικονομείς κατά το στάδιο των δοκιμών, όταν ακόμη κάνεις συχνές αλλαγές στον κώδικα: Αλλαγές σε ένα compilation unit μόνο δεν προκαλούν recompilation ολόκληρου του κώδικα από την αρχή, αλλά μόνο του συγκεκριμένου compilation unit

Δημοσ.
Αν και η C δεν έχει κλάσεις για να βάζεις κάθε κλάση σε ξεχωριστό compilation unit (όχι πως είναι κατ' ανάγκην απαραίτητο αυτό, ακόμη και σε γλώσσες που έχει νόημα), το να χωρίσεις τον κώδικά σου σε περισσότερα του ενός αρχεία μπορεί να βοηθήσει στα εξής:

 

1. Καλύτερη λογική οργάνωση του κώδικα: Αντί για ένα τεράστιο αρχείο, μπορείς να ομαδοποιείς συναρτήσεις και custom τύπους δεδομένων βάσει συνάφειας. Π.χ. αν στο project σου φτιάχνεις και έναν parser, μπορείς να βάλεις τα στοιχεία που τον αποτελούν σε ένα ξεχωριστό compilation unit

2. Όσο πιο μεγάλο το project, τόσο περισσότερο χρόνο θα εξοικονομείς κατά το στάδιο των δοκιμών, όταν ακόμη κάνεις συχνές αλλαγές στον κώδικα: Αλλαγές σε ένα compilation unit μόνο δεν προκαλούν recompilation ολόκληρου του κώδικα από την αρχή, αλλά μόνο του συγκεκριμένου compilation unit

 

Αρα c++ με 1000.

Κλασεις και δωστου!!!!

Δημοσ.

Ο άνθρωπος ένα project για τη σχολή του θέλει να κάνει, όχι να φτιάξει τη μηχανοργάνωση του ΙΚΑ !!! Όσο μεγάλο και να είναι το project πάνω από 4-5 σελίδες κώδικα δεν παίζει να είναι οπότε μπορείς άνετα να το βάλεις σε ένα αρχείο. Ακόμα καλύτερα μπορείς να βάλεις σε ένα αρχείο των κώδικα των συναρτήσεων, σε ένα header file τους ορισμούς και σε ένα άλλο τη main().

Δημοσ.

Εχει δικαιο ο epersidi.

Εγω να πω οτι αν προγραμματιζεις σε C η δουλεια αυτη με τα αρχεια

σε linux ειναι ειναι πολυ πιο ευκολη και ξεκουραστη.

Δημοσ.
...

Εγω να πω οτι αν προγραμματιζεις σε C η δουλεια αυτη με τα αρχεια

σε linux ειναι ειναι πολυ πιο ευκολη και ξεκουραστη.

 

Tο παραπάνω σχόλιο είναι ότι ναναι.

 

Απο εκεί και πέρα αν το project είναι πράγματι μεγάλο θα ήταν καλό η χρήση ενός revision control system, όπως svn. Αν δεν είναι τόσο μεγάλο οσο φαντάζομαι η οργάνωση του κώδικα σε compilatrion units είναι αρκετή.

Δημοσ.

Εντάξει δεν είναι και πολύ μεγάλο, είναι υλοποίηση εντολής του DOS συγκεκριμένα της attrib. Απλά είδα μερικούς να χωρίζουν τον κωδικά τους σε κομμάτια και είπα να ρωτήσω τι πλεονέκτημα έχει.

Δημοσ.
Tο παραπάνω σχόλιο είναι ότι ναναι.

 

Απο εκεί και πέρα αν το project είναι πράγματι μεγάλο θα ήταν καλό η χρήση ενός revision control system, όπως svn. Αν δεν είναι τόσο μεγάλο οσο φαντάζομαι η οργάνωση του κώδικα σε compilatrion units είναι αρκετή.

 

Και το δικό σου το σχόλιο ότι να ναι είναι ! Άκου svn για project σχολής το οποίο θα το δει μόνο ο developer και ο καθηγητής ! Ή compilation units για ένα πρόγραμμα που κάνει μερικά δευτερόλεπτα για να ολοκληρωθεί το Build. Διαβάστε πρώτα το αρχικό ποστ και μετά δίνεται τα "φώτα" σας. Μη λέτε ότι να ναι προς χάριν εντυπωσιασμού ...

Δημοσ.

Πολύ καλά το διαβάσαμε το post. Εφόσον η ερώτηση γίνεται σε εκπαιδευτικά πλαίσια, κάποιες απαντήσεις μπορούν να λάβουν και αυτόν τον παράγοντα υπ' όψιν. Εσύ το αντιμετωπίζεις με καθαρά ωφελιμιστικά κριτήρια του «εδώ και τώρα», άλλες απαντήσεις μπορεί όχι.

 

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

Δημοσ.

Ευχαριστώ για την βοήθεια σας..έχω άλλη μια απορία; υπάρχει κάποια συνάρτηση για windows (σαν το getopt) για να κάνω parse τα arguments? ή πρέπει να το κάνω με if statments?

Δημοσ.

@acid18: Αν χρησιμοποιείς κάποιο gcc port για windows όπως mingw ή cygwin υπάρχει υλοποίηση της getopt κανονικότατα. Αν χρησιμοποιείς κάποιον άλλο compiler θα πρέπει να ρίξεις μια ματιά στα χαρακτηριστικά του. Δεν ξέρω αν επιτρέπεται να χρησιμοιήσεις άλλες βιβλιοθήκες. Σε περίπτωση που μπορείς ρίξε μια ματιά στα παρακάτω link:http://argtable.sourceforge.net/

 

Και το δικό σου το σχόλιο ότι να ναι είναι ! Άκου svn για project σχολής το οποίο θα το δει μόνο ο developer και ο καθηγητής ! Ή compilation units για ένα πρόγραμμα που κάνει μερικά δευτερόλεπτα για να ολοκληρωθεί το Build. Διαβάστε πρώτα το αρχικό ποστ και μετά δίνεται τα "φώτα" σας. Μη λέτε ότι να ναι προς χάριν εντυπωσιασμού ...

 

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

Αυτά ...

Δημοσ.

@acid18

 

Τι εννοείς για windows ; Αν εννοείς το API των windows, ναι, έχει σχεδόν ότι ζητήσεις.

Πού θα το βρεις και πώς θα το χρησιμοποιήσεις είναι το δύσκολο.

 

Δες την

GetCommandLine()

και τις CreateProcess.

Δημοσ.
Ευχαριστώ για την βοήθεια σας..έχω άλλη μια απορία; υπάρχει κάποια συνάρτηση για windows (σαν το getopt) για να κάνω parse τα arguments? ή πρέπει να το κάνω με if statments?

 

Σαν την getopt όχι, μπορείς όμως να δεις την CommandLineToArgvW (προυποθέτει Unicode :-\) η οποία σε συνδυασμό με την προαναφερθείσα GetCommandLine μπορεί να σε διευκολύνει στην διαχείριση τους.

 

Διαφορετικά, μπορείς να δεις κάποια δικιά σου μέθοδο διαχείρισης παραμέτρων.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...