Επισκέπτης Δημοσ. 23 Μαρτίου 2019 Δημοσ. 23 Μαρτίου 2019 (επεξεργασμένο) 3 ώρες πριν, PC_MAGAS είπε Η τελική μεταγλωτισμένη εφαρμογή θα έχει μεγάλο μέγεθος. Στο θέμα της τελικής εφαρμογής έχω μια απορία... Όταν γράφω κώδικα χρησιμοποιώ κάποια εξωτερικά αρχεία .txt, όταν λοιπόν ολοκληρωθεί ο κώδικας, το τελικό εκτελέσιμο έχει ανάγκη από την ύπαρξη των αρχείων αυτών (δηλαδή των .txt), για να λειτουργήσει, ή είναι πλέον αυτόνομο πρόγραμμα.; ... Δοκίμασα να διαγράψω προσωρινά τα αρχεία αυτά και να κάνω εκτέλεση, φαίνεται να λειτουργεί κανονικά, αλλά θα ήθελα και μια γνώμη... 😀 3 ώρες πριν, PC_MAGAS είπε Γι αυτό ποιο συνετό είναι να έχεις το κατάλληλο μέγεθος βιβλιοθηκών με τις ενέργειες που θες. Τον τελευταίο καιρό μεταξύ άλλων, προσπαθώ να δημιουργήσω δικές μου βιβλιοθήκες σε .txt πάντα, κι ένα μαθηματικό τυπολόγιο. --Υπάρχει τρόπος να τυπώσω στην C ειδικά σύμβολα.; Πχ το ανάποδο Α = «για κάθε», τομή συνόλων κλπ.; Στην παρακάτω φωτο, ένα μαθηματικό πληκτρολόγιο που έχω υλοποιήσει εν μέρη σε html. Είναι τόσα πολλά τα σύμβολα που δεν ξέρω αν τελικά θα ήταν πρακτική η χρήση του. Εκτός ίσως αν ομαδοποιηθούν σε υποσελίδες. Επεξ/σία 23 Μαρτίου 2019 από Επισκέπτης
PC_MAGAS Δημοσ. 23 Μαρτίου 2019 Δημοσ. 23 Μαρτίου 2019 Φίλε @tony_dim_2018: Για εμφάνιση θες μια βιβλιοθήκη για GUI όπως Qt/Qml, Gtk κλπ κλπ Τα .txt αρχεία θα είναι αρχεία με αρχικά δεδομένα τα οποία το πρόγραμμα θα τα διαβάζει; Εάν τα αρχεία κειμένου είναι κώδικας τότε είναι αχρείαστα για την τελική εφαρμογή που θα διανεμηθεί. Οι βιβλιοθήκες είναι μεταγλωττισμένος κώδικας άρα είναι αρχεία κειμένου με κατάληξη .c τα οποία τα μεταγλώττισε ο compiler. Μπορεί εφόσον μεταγλωττιστούν να συνδεθούν με το κατάλληλο πρόγραμμα/functionality (linker). Άρα μπορείς να τα μεταγλωττίσεις αυτούσια και μετά να τα συνδέσεις με την υπόλοιπη εφαρμογή, σε μεγαλύτερα project θες ένα εργαλείο όπως το make προκειμένου μέσω αρχείων να ορίζεις την διαδρομή των αλλεπάλληλων μεταγλωττίσεων που χρειάζεται, σε GNU/Linux το αναλαμβάνει το εργαλείο make έσω κάποιου κατάλληλου αρχείου ρυθμίσεων (που ονομάζετε Makefile). Γενικά μια εφαρμογή που διανέμετε αποτελείτε από τα εξής αρχεία: Αρχεία εκτελέσιμου κώδικα (δηλαδή ότι πάραξε ο compiler εφόσον πέρασε τα αρχεία κώδικα ένα χεράκι) εν ολίγοις εφαρμογή + μεταγλωττισμένες βιβλίοθήκες Αρχεία ρυθμίσεων τα οποία μπορούν να δημιουργούνται κατά την πρώτη εκτέλεση. Αρχεία εικόνων/ήχων κλπ κλπ (aka assets) Τα οποία θα πρέπει να διανέμονται. Ακόμη δε μπορείς να κάνεις το κομμάτι του GUI σε javascript html και μέσω electron και bindings να συνδέσεις την εφαρμογή σου με κώδικα C.
Επισκέπτης Δημοσ. 23 Μαρτίου 2019 Δημοσ. 23 Μαρτίου 2019 1 ώρα πριν, PC_MAGAS είπε Τα .txt αρχεία θα είναι αρχεία με αρχικά δεδομένα τα οποία το πρόγραμμα θα τα διαβάζει; Δεν ξέρω τι εννοείς «αρχικά δεδομένα». Ότι χρειάζεται να «διαβάσει» το πρόγραμμα, το έχω περάσει μέσα σε σταθερές παραμέτρους (τις μεταβλητές δηλαδή), κι εκεί υπάρχουν κείμενα, αριθμοί και σύμβολα (όχι ειδικά μαθηματικά σύμβολα). 1 ώρα πριν, PC_MAGAS είπε Οι βιβλιοθήκες είναι μεταγλωττισμένος κώδικας άρα είναι αρχεία κειμένου με κατάληξη .c τα οποία τα μεταγλώττισε ο compiler. Μπορεί εφόσον μεταγλωττιστούν να συνδεθούν με το κατάλληλο πρόγραμμα/functionality (linker). Άρα μπορείς να τα μεταγλωττίσεις αυτούσια και μετά να τα συνδέσεις με την υπόλοιπη εφαρμογή, σε μεγαλύτερα project θες ένα εργαλείο όπως το make προκειμένου μέσω αρχείων να ορίζεις την διαδρομή των αλλεπάλληλων μεταγλωττίσεων που χρειάζεται, σε GNU/Linux το αναλαμβάνει το εργαλείο make έσω κάποιου κατάλληλου αρχείου ρυθμίσεων (που ονομάζετε Makefile). Δεν κατάφερα να μάθω την σύνδεση των αρχείων όπως προβλέπεται για την γλώσσα C, κι έτσι προς το παρόν χρησιμοποιώ τα αρχεία .txt που τα βρήκα σε μαθήματα για την C++ κι απλώς τα δοκίμασα και στην C. Μέσα σ' αυτά καταθέτω τακτοποιημένα (όχι χύμα), και σε ξεχωριστά αρχεία, μεταβλητές, σταθερές, συναρτήσεις, κείμενα και σχόλια που χρησιμοποιώ συχνά όπως «δώσε ένα αριθμό και enter», είτε «το αποτέλεσμα είναι %d, x», κλπ. Σε περίπτωση που θέλω να κάνω αλλαγές μέσα σ' αυτά τα αρχεία, δοκιμάζω πρώτα τον κώδικα σ' ένα πρόχειρο πρόγραμμα και αν λειτουργεί σωστά τον μεταφέρω στο .txt, ως συνάρτηση πλέον. Αποθηκεύω και ανοίγω τον κώδικα του προγράμματος για να κάνω compile. Αν όλα πάνε καλά σ' αυτή τη φάση, η συνέχεια είναι γνωστή. Και τέλος, έχω συνδέσει χειροκίνητα να το πω έτσι, όλα τα αρχεία σε ένα .txt, που είναι Πχ το 'Γενικό.txt' και περιέχει μόνο τα σχετικά include 'όνομα_αρχείου.txt', κι έτσι καλώ μόνο το 'Γενικό.txt' στα πρόγραμμα, με... ένα include. Από εδώ και κάτω δημιουργήθηκε η απορία της αρχικής μου ανάρτησης. Όλα αυτά βέβαια στα πλαίσια του χόμπι αυτής της περιόδου. Μια άλλη φορά ίσως πράξω διαφορετικά, έτσι για ν' αλλάξω παραστάσεις στην καθημερινότητα μου. Τα υπόλοιπα θέματα που έδωσες, τ' αποθήκευσα και θα τα ψάξω εν καιρώ. Σ' ευχαριστώ! 😀
PC_MAGAS Δημοσ. 24 Μαρτίου 2019 Δημοσ. 24 Μαρτίου 2019 (επεξεργασμένο) 3 ώρες πριν, tony_dim_2018 είπε Δεν ξέρω τι εννοείς «αρχικά δεδομένα». Ότι χρειάζεται να «διαβάσει» το πρόγραμμα, το έχω περάσει μέσα σε σταθερές παραμέτρους (τις μεταβλητές δηλαδή), κι εκεί υπάρχουν κείμενα, αριθμοί και σύμβολα (όχι ειδικά μαθηματικά σύμβολα). Εννοώ αρχεία ρυθμίσεων όπως πχ. Το αρχείο /etc/apache2/sites-available/somesite.txt που ρυθμίζεις τα virtual hosts στον apache 3 ώρες πριν, tony_dim_2018 είπε Δεν κατάφερα να μάθω την σύνδεση των αρχείων όπως προβλέπεται για την γλώσσα C, κι έτσι προς το παρόν χρησιμοποιώ τα αρχεία .txt που τα βρήκα σε μαθήματα για την C++ κι απλώς τα δοκίμασα και στην C. Εάν χρησιμοποιείς GNU/Linux η Unix-based σύστημα, ρίξε μια ματιά σε ένα project μου και το πως το σπάω σε βιβλιοθήκες: https://github.com/pc-magas/burmester-desmedt/blob/master/Makefile Εάν δεις κάνω compile τις βιβλιοθήκες μου μέσω gcc με τις παραμέτρους -c η οποία παράγει ενδιάμεσο αρχείο αντί για εκτελέσιμο και -o για να ορίσεις το output αρχείο. Έτσι με αυτεςπαράγεις στατικές βιβλιοθήκες με κατάληξη .o . Μετά όλες αυτές τις παίρνω μαζί με τον κώδικα της εφαρμογής σαν να κάνω compile πολλαπλά αρχεία. Περισσότερες πληροφορίες δες στο https://stackoverflow.com/a/2734727 Όσο αφορά τις βιβλιοθήκες υπάρχουν δυναμικές και στατικές, να πω την αλήθεια ξέρω ότι υπάρχουν διαφορές αλλά δεν εντρύφησα να τις μάθω λόγο ενασχόλησης με άλλες τεχνολογίες. Παρόλα αυτά οι δυναμικές βιβλιοθήκες που διανέμονται ανεξάρτητα είναι δυναμικές και στον gcc συνδέονται με το -l flag. Επεξ/σία 24 Μαρτίου 2019 από PC_MAGAS
Επισκέπτης Δημοσ. 24 Μαρτίου 2019 Δημοσ. 24 Μαρτίου 2019 22 λεπτά πριν, PC_MAGAS είπε Εάν χρησιμοποιείς GNU/Linux η Unix-based σύστημα, ρίξε μια ματιά σε ένα project μου και το πως το σπάω σε βιβλιοθήκες Το μόνο που μπορώ να πω, είναι ότι ο κώδικας μοιάζει με καλλιτεχνική δημιουργία, σαν πίνακας ζωγραφικής. Τα υπόλοιπα δεν τα γνωρίζω ακόμα... Τα σημειώνω πάντως, και σ' ευχαριστώ!
παπι Δημοσ. 24 Μαρτίου 2019 Δημοσ. 24 Μαρτίου 2019 Κοιτα, γενικα ειναι απλα πραματα, απλα εχει δυσκολο learn curve. Δεν βρισκω μια εξηγηση που ειχα κανει για declaration definition 😕 Τεσπα, φαντασου οτη η C δεν ειναι C αλλα C1 C2 C3. Η c1 λεγεται preprocessor και δουλυει με οτι αρχιζει με # πχ το #include <foo.h> κανει copy paste εκει που ειναι το #include το περιεχομενο του foo.h , αυτο τιποτα αλλο, δεν "βαζει" καποια βιβλιοθηκη οπως φανταζεσαι, απλα κανει copy paste. Η c2 λεγεται compiler, αυτη παιρνει ολα τα αρχει c (αφου περασουν απο την c1) , και μετατρεπει το καθενα σε γλωσσα μηχανης. Προσεξε το καθε c αρχειο θα μετατραπει σε ξεχωριστο "αρχειο γλωσσας μηχανης". Αυτα τα αρχεια ονομαζονται objects ( *.obj, *.o ) ισως τα δεις να τα λενε και modules ή units Η c3 λεγεται linker. Αυτη παιρνει ολα τα objects και τα ενωνει σε ενα executable.
k33theod Δημοσ. 24 Μαρτίου 2019 Δημοσ. 24 Μαρτίου 2019 Στις 14/3/2019 στις 11:43 ΜΜ, tony_dim_2018 είπε Γιατί να γράφουμε συνέχεια include στην C όταν μπορούμε να έχουμε μόνο ένα; Από την άλλη μεριά, είναι σωστό να έχουμε μόνο ένα; Εσείς τι γνώμη έχετε; Γειά και απο μένα Δεν υπάρχει κανένα λόγος εφόσον χρειάζεται 1 header να κάνεις include 10 ή 50 ή 100 ή τα περίπου 300 που έχει η basic εγκατάσταση του mingw. Εφόσον το κάνεις κάντο σωστά. Χρησιμοποίησε δηλαδή code guard, φαντάζομαι δεν χρησιμοποιείς ή κάνω λάθος? Αν χρειαστείς static linking θα έχεις πρόβλημα μεγέθους.😉
Επισκέπτης Δημοσ. 24 Μαρτίου 2019 Δημοσ. 24 Μαρτίου 2019 15 ώρες πριν, παπι είπε Κοιτα, γενικα ειναι απλα πραματα Σ' ευχαριστώ παπι 12 ώρες πριν, k33theod είπε Γειά και απο μένα Καλώς τον, υγεία και χαρά! 12 ώρες πριν, k33theod είπε Δεν υπάρχει κανένα λόγος εφόσον χρειάζεται 1 header να κάνεις include 10 ή 50 ή 100 ή τα περίπου 300 που έχει η basic εγκατάσταση του mingw. Ναι, έχεις δίκιο! 13 ώρες πριν, k33theod είπε Εφόσον το κάνεις κάντο σωστά. Χρησιμοποίησε δηλαδή code guard, φαντάζομαι δεν χρησιμοποιείς ή κάνω λάθος? Δεν ξέρω, τι είναι αυτό.; Σ' ευχαριστώ k33theod Υ.Γ.: --Χαιρετισμούς στον 6χρονο μικρό συνάδελφο! 😀 --Υγεία να έχουμε, κι όλα τ' άλλα θα γίνουν....
k33theod Δημοσ. 24 Μαρτίου 2019 Δημοσ. 24 Μαρτίου 2019 Sorry η σωστή ονομασία είναι include guard.https://en.wikipedia.org/wiki/Include_guard Όταν κάνεις include ένα header file o preprossesor παίρνει το περιεχόμενο του και το βάζει στο αρχείο πηγαίου κώδικα. Όταν δημιουργείς header files για να αποφύγεις διπλό incude του ίδιου αρχείου χρησιμοποιείς include guard. Δες πως είναι π.χ το stdio.h και κάπως έτσι είναι όλα τα headers στο φάκελλο include του compiler που χρησιμοποιείς #ifndef _STDIO_H #define _STDIO_H /* All the headers include this file. */ #include <_mingw.h> #define L_tmpnam (16) #define _IOFBF 0x0000 /* full buffered */ #define _IOLBF 0x0040 /* line buffered */ #define _IONBF 0x0004 /* not buffered */ #define _IOMYBUF 0x0008 /* stdio malloc()'d buffer */ #define _IOEOF 0x0010 /* EOF reached on read */ #define _IOERR 0x0020 /* I/O error from system */ #define _IOSTRG 0x0040 /* Strange or no file descriptor */ #ifdef _POSIX_SOURCE # define _IOAPPEND 0x0200 #endif /* The buffer size as used by setbuf such that it is equivalent to * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ). */ #define BUFSIZ 512 /* Constants for nOrigin indicating the position relative to which fseek * sets the file position. Defined unconditionally since ISO and POSIX * say they are defined here. */ #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #endif /* _STDIO_H */ To έχω ξελαφρώσει λίγο για να μην σε μπερδεύει. Αυτό που πρέπει να σου μείνει είναι το #ifndef _STDIO_H #define _STDIO_H bla bla #endif /* _STDIO_H */ έτσι και εσύ στο ola.h πρέπειε να βάλεις ένα ifndef define endif
Επισκέπτης Δημοσ. 25 Μαρτίου 2019 Δημοσ. 25 Μαρτίου 2019 Στις 22/3/2019 στις 9:05 ΠΜ, Bspus είπε Πχ εχεις εναν ακεραιο για ηλικια, αντι να τον πεις age τον λες var_int_age Αυτός ο τρόπος ονοματοδοσίας μ' αρέσει πολύ! Όχι όμως για τις μεταβλητές, αλλά για την τακτοποίηση ενός συνόλου αρχείων μέσα στο φάκελο εργασίας... 😀
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα