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

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

Επισκέπτης
Δημοσ.

Γιατί να γράφουμε συνέχεια include στην C όταν μπορούμε να έχουμε μόνο ένα;

Από την άλλη μεριά, είναι σωστό να έχουμε μόνο ένα;

Εσείς τι γνώμη έχετε;

Δημοσ.

Αν θες ντε και καλά από μόνος σου να φορτώνεις όλες τις βιβλιοθήκες με ένα include μπορείς να φτιάξεις ένα header αρχείο που θα έχει μέσα όλα τα include που υπάρχουν στον compiler σου. Για την c++ από ό,τι θυμάμαι υπάρχει ένα include που κάνει ένα σύνολο από "βασικές" βιβλιοθήκες να περνιέται με την πρώτη αλλά μου διαφεύγει τώρα ποιο είναι.

Το κύριο πρόβλημα που πιστεύω πως θα υπάρξει στο να έχουμε μόνο ένα είναι ότι κάποιες βιβλιοθήκες έχουν στάνταρ ονόματα μεταβλητών, συναρτήσεων κ.α. που αν είσαι τέρμα γκαντέμης θα έχεις τουλάχιστον μία συνάρτηση ή μεταβλητή με όνομα που είναι predefined σε μια βιβλιοθήκη που μόλις έκανες include. Μόνο και μόνο για αυτό πιστεύω ότι η χρήση καθολικού include είναι κακή ιδέα και μπορεί να φανεί φοβερά τεμπέλικη σαν προσέγγιση.

Δημοσ.
29 λεπτά πριν, c4tt3l είπε

Για την c++ από ό,τι θυμάμαι υπάρχει ένα include που κάνει ένα σύνολο από "βασικές" βιβλιοθήκες να περνιέται με την πρώτη αλλά μου διαφεύγει τώρα ποιο είναι.

stdafx.h αλλα δεν εχει σημασια το ονομα. Ειναι διαδικασια που ονομαζεται precompiled headers και πρεπει να υπαρχει υποστηριξη απο τον compiler, αλλιως δεν εχει νοημα. Επεισης ειναι μια λυση για ενα προβλημα που αμφιβαλω αν εχει αντιμετωπισει ο ts.

Επισκέπτης
Δημοσ.

Σας ευχαριστώ για τις απαντήσεις σας!

11 ώρες πριν, c4tt3l είπε

Αν θες ντε και καλά από μόνος σου να φορτώνεις όλες τις βιβλιοθήκες με ένα include μπορείς να φτιάξεις ένα header αρχείο που θα έχει μέσα όλα τα include που υπάρχουν στον compiler σου.

Στα πλαίσια του χόμπυ, δεν μου χρειάζονται όλα έτσι κι αλλιώς.

11 ώρες πριν, c4tt3l είπε

Το κύριο πρόβλημα που πιστεύω πως θα υπάρξει στο να έχουμε μόνο ένα είναι ότι κάποιες βιβλιοθήκες έχουν στάνταρ ονόματα μεταβλητών, συναρτήσεων κ.α. που αν είσαι τέρμα γκαντέμης θα έχεις τουλάχιστον μία συνάρτηση ή μεταβλητή με όνομα που είναι predefined σε μια βιβλιοθήκη που μόλις έκανες include. Μόνο και μόνο για αυτό πιστεύω ότι η χρήση καθολικού include είναι κακή ιδέα

Διόρθωσε με αν έχω καταλάβει λάθος.

Τα ονόματα των περιεχόμενων μεταβλητών σε συναρτήσεις είναι «τοπικά ονόματα», κι έτσι δεν έρχονται σε διένεξη με τις μεταβλητές άλλων συναρτήσεων, έστω και αν έχουν ακριβώς τα ίδια ονόματα. Οι υπόλοιπες μεταβλητές που υπάρχουν χύμα, μέσα στις βιβλιοθήκες αυτές, είναι γραμμένες με κεφαλαία... «εγώ», γράφω με πεζά κατά την συνήθη προγραμματιστική τακτική, αν και μερικές φορές το παραβιάζω. Το να λες λοιπόν ότι τα ονόματα της βιβλιοθήκης θα έρθουν σε διένεξη από γκαντεμιά, είναι σαν να λες ότι η γλώσσα προγραμματισμού C σχεδιάστηκε τυχαία και λειτουργεί κατά τύχη.

11 ώρες πριν, c4tt3l είπε

και μπορεί να φανεί φοβερά τεμπέλικη σαν προσέγγιση.

Τεμπέλικη ναι, όταν θα γράψουμε μια εντολή για όλα, αλλά μήπως αυτό δεν είναι μια από τις πολλές διευκολύνσεις του προγραμματισμού.; Έπειτα πόσο τεμπέλικη είναι η υλοποίηση, όταν μέσω αυτής μπαίνουμε σε μια διαδικασία αναζήτησης, επιλογής, και τελικά αυτής της ίδιας της μάθησης.;

11 ώρες πριν, παπι είπε

stdafx.h αλλα δεν εχει σημασια το ονομα. Ειναι διαδικασια που ονομαζεται precompiled headers και πρεπει να υπαρχει υποστηριξη απο τον compiler, αλλιως δεν εχει νοημα. Επεισης ειναι μια λυση για ενα προβλημα που αμφιβαλω αν εχει αντιμετωπισει ο ts.

Είναι αλήθεια ότι δεν έχω χρειαστεί ποτέ όλα τα include που υπάρχουν, απλώς το είχα σαν απορία από καιρό.

Πρόσφατα το υλοποίησα με τη βοήθεια αρχείου .txt (μόνο τα βασικά που χρησιμοποιώ, όχι όλα), και περίμενα να βρω λίγο χρόνο για να το συζητήσουμε εδώ.

Δημοσ.
46 λεπτά πριν, tony_dim_2018 είπε

Τα ονόματα των περιεχόμενων μεταβλητών σε συναρτήσεις είναι «τοπικά ονόματα», κι έτσι δεν έρχονται σε διένεξη με τις μεταβλητές άλλων συναρτήσεων, έστω και αν έχουν ακριβώς τα ίδια ονόματα. Οι υπόλοιπες μεταβλητές που υπάρχουν χύμα, μέσα στις βιβλιοθήκες αυτές, είναι γραμμένες με κεφαλαία... «εγώ», γράφω με πεζά κατά την συνήθη προγραμματιστική τακτική, αν και μερικές φορές το παραβιάζω. Το να λες λοιπόν ότι τα ονόματα της βιβλιοθήκης θα έρθουν σε διένεξη από γκαντεμιά, είναι σαν να λες ότι η γλώσσα προγραμματισμού C σχεδιάστηκε τυχαία και λειτουργεί κατά τύχη.

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

Το θέμα είναι π.χ. αν έχεις βάλει μέσα την βιβλιοθήκη για OpenMP για κάποιο λόγο και κάπου έχεις γράψει κάπου μια μεταβλητή ή μια συνάρτηση με όνομα parallel, shared, scheduled κλπ. Ένας θεός ξέρει τι θα ανασύρει ο compiler από τη σούπα που έφτιαξες.

Θα μου πεις "τι OpenMP και κολοκύθια, εγώ θα βάλω τα βασικά τα γνωστά τα κύρια σαν βιβλιοθήκες". Έλα όμως που οι βιβλιοθήκες έχουν ένα μάτσο πράγματα που ίσως δεν θα χρειαστείς ή δεν θα έχεις εξοικείωση μαζί τους και όταν σου τα σκάσουν θα είναι αργά γιατί θα παλεύεις να βρεις γιατί ο compiler λέει για διπλότυπο όνομα και στο stack overflow θα σου πετάνε καντήλια οι neckbeards.

Δημοσ. (επεξεργασμένο)

Ανά αρχείο η C έχει "καθολικές", που τις βλέπουν οι συναρτήσεις στο αρχείο, αλλά όχι άλλες συναρτήσεις σε άλλα αρχεία, όταν ορίζονται ως στατικές. Αν τώρα το include μπει σε ένα αρχείο τότε ό,τι έχει θα φαίνεται σε αυτό το αρχείο, δηλαδή ότι έχει σε ονόματα "καθολικά" σε αυτό.

 

δες και εδώ: https://docs.microsoft.com/en-us/cpp/c-language/c-identifiers?view=vs-2017

για τα ονόματα. Η ANSI C δεν υπολογίζει από το έβδομο και μετά χαρακτήρα, που σημαίνει ότι δυο ονόματα διαφορετικά με ίδιους τους έξι πρώτους χαρακτήρες, σε binary, για εξωτερικά ονόματα, θα είναι ίδιοι για τον compiler. Εσωτερικά ονόματα, εντός συνάρτησης υπολογίζονται μέχρι τους 31 χαρακτήρες.

 

δες και το scope: https://docs.microsoft.com/en-us/cpp/c-language/scope-and-visibility?view=vs-2017

 

Επεξ/σία από solarpower
Δημοσ.

Αυτό που λες γίνεται αλλα μην το κάνεις είναι bad practice και πηγή για bugs. Αν βαριέσαι τόσο να τα βάζεις μπορείς να βάλεις κάνα IDE να στα ξερνάει αυτόματα για σένα, δεν είμαι σίγουρος για τη C αλλά για τα javoειδή αυτά είναι ψωμοτύρι πχ.

  • Like 1
Επισκέπτης
Δημοσ.
37 λεπτά πριν, the other one είπε

Αυτό που λες γίνεται αλλα μην το κάνεις είναι bad practice και πηγή για bugs. Αν βαριέσαι τόσο να τα βάζεις μπορείς να βάλεις κάνα IDE να στα ξερνάει αυτόματα για σένα, δεν είμαι σίγουρος για τη C αλλά για τα javoειδή αυτά είναι ψωμοτύρι πχ.

Σ' ευχαριστώ!

Το είχα ως απορία.

Βαρεμάρα και χόμπυ δεν πάνε μαζί...😀

Επισκέπτης
Δημοσ. (επεξεργασμένο)

Αμα κάνεις προγραμματισμό για χόμπυ έχεις μεγάλες πιθανότητες να γίνεις διευθυντικό στέλεχος σε ΙΤ μεγάλης εταιρίας πάντως.. να ξέρεις.. γιατί είναι κάτι άτομα εκεί μέσα απο κολλέγια και ελληνο -αμερικανικές / γερμανικές/ γαλλικές ενώσεις που είχαν γνωστό και παίρνουν 2-3 χιλιάρικα και για να δικαιολογήσουν το μισθουλάκο τους πετάγονται στους προγραμματιστές για να μεταφέρουν ιδέες τους.. φουτουριστικές και ενθουσιώδεις...  

GTLGyIY.jpg

Επεξ/σία από Επισκέπτης
Δημοσ.
Στις 15/3/2019 στις 2:35 ΠΜ, c4tt3l είπε

Το κύριο πρόβλημα που πιστεύω πως θα υπάρξει στο να έχουμε μόνο ένα είναι ότι κάποιες βιβλιοθήκες έχουν στάνταρ ονόματα μεταβλητών, συναρτήσεων κ.α. που αν είσαι τέρμα γκαντέμης θα έχεις τουλάχιστον μία συνάρτηση ή μεταβλητή με όνομα που είναι predefined σε μια βιβλιοθήκη που μόλις έκανες include. Μόνο και μόνο για αυτό πιστεύω ότι η χρήση καθολικού include είναι κακή ιδέα και μπορεί να φανεί φοβερά τεμπέλικη σαν προσέγγιση.

 

Ισως γι αυτο θεωρειται καλη πρακτικη, ασχετα με την πιθανοτητα για conflict να χρησιμοποιεις στις μεταβλητες σου μια ονοματολογια που ειναι σιγουρο οτι αποφευγει τετοια προβληματα.

Πχ εχεις εναν ακεραιο για ηλικια, αντι να τον πεις age τον λες var_int_age

θα βοηθαει και αργοτερα σε αναζητησεις στο source code

Επισκέπτης
Δημοσ. (επεξεργασμένο)
10 ώρες πριν, ioannis000 είπε

Αμα κάνεις προγραμματισμό για χόμπυ έχεις μεγάλες πιθανότητες να γίνεις διευθυντικό στέλεχος σε ΙΤ μεγάλης εταιρίας πάντως.. να ξέρεις.. γιατί είναι κάτι άτομα εκεί μέσα απο κολλέγια και ελληνο -αμερικανικές / γερμανικές/ γαλλικές ενώσεις που είχαν γνωστό και παίρνουν 2-3 χιλιάρικα και για να δικαιολογήσουν το μισθουλάκο τους πετάγονται στους προγραμματιστές για να μεταφέρουν ιδέες τους.. φουτουριστικές και ενθουσιώδεις... 

Η παραγωγή ιδεών, προϋποθέτει και τους κατάλληλους αποδέκτες. Διαφορετικά ο «παραγωγός», πέφτει σε κατάσταση βαρεμάρας, είτε αποφασίζει κάποια στιγμή να δράσει μόνος. Έτσι, ο ίδιος δεν βαριέται ποτέ, κι αφήνει άλλους στην ησυχία τους.

Επεξ/σία από Επισκέπτης
Δημοσ.
4 ώρες πριν, Bspus είπε

Ισως γι αυτο θεωρειται καλη πρακτικη, ασχετα με την πιθανοτητα για conflict να χρησιμοποιεις στις μεταβλητες σου μια ονοματολογια που ειναι σιγουρο οτι αποφευγει τετοια προβληματα.

Πχ εχεις εναν ακεραιο για ηλικια, αντι να τον πεις age τον λες var_int_age

θα βοηθαει και αργοτερα σε αναζητησεις στο source code

Η καλυτερη πρακτικη ειναι το namespace. Σε C μπορεις να το υλοποιησεις με prefix το apiname βλεπε sqlite που τα παντα ειναι sqlite_* 

  • Like 1
Δημοσ.

Δεν ενδεικνύεστε το να βάζεις όλες τις βιβλιοθήκες που θες και αυτό γιατί:

  1. Η τελική μεταγλωτισμένη εφαρμογή θα έχει μεγάλο μέγεθος.
  2. Ενδεχομένος κάποια βιβλιοθήκη να έχει κάποιο κενό ασφαλείας το οποίο μπορεί να εκμεταλλευθεί κάποιος.

Γι αυτό ποιο συνετό είναι να έχεις το κατάλληλο μέγεθος βιβλιοθηκών με τις ενέργειες που θες.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...