nilosgr Δημοσ. 23 Ιουνίου 2011 Δημοσ. 23 Ιουνίου 2011 Γειά σας παιδιά, έχω μια κουβέντα μ ένα φίλο μου και θέλω τη γνώμη σας. Συγκεκριμένα, βλέπουμε οτι ο πηγαίος κώδικας του Linux έχει άπειρες συναρτήσεις οι οποίες είναι υλοποιημένες με #define, για ποιό λόγο γίνεται αυτό; Είναι επειδή μια συνάρτηση γραμμένη με #define είναι πιό γρήγορη απ την ίδια αλλά γραμμένη "κανονικά" ή επειδη έτσι γράφτηκαν κι έτσι έμειναν;
NullScan Δημοσ. 23 Ιουνίου 2011 Δημοσ. 23 Ιουνίου 2011 Άν εννοείς για ποιό λόγο δέν γράφονται σαν κανονικές functions και ορίζονται inline η απλοϊκή απάντηση είναι ότι υπό προϋποθέσεις οι inline είναι γρηγορότερες και μειώνουν το μέγεθος του παραγόμενου binary ΑΝ χρησιμοποιηθούν σωστά και με φειδώ.
pinball_elf Δημοσ. 3 Αυγούστου 2011 Δημοσ. 3 Αυγούστου 2011 Τα #defines και γενικότερα τα macros δεν είναι συναρτήσεις, και δεν υπάρχουν στο τελικό εκτελέσιμο ως συναρτήσεις. Μπορείς να το δείς και με την εντολή $nm <executable name>. Στην ουσία τα macros δεν μεταγλωττίζονται ποτέ απο τον μεταγλωττιστή, γιατί απλούστατα τα επεξεργάζεται πρίν από τον μεταγλωττιστή ο προεπεξεργαστής (C preprocessor). Ο οποίος στην ουσία αυτό που κάνει είναι να αντικαθιστά/αλλάζει τον κώδικα που έχει οριστεί στο macro, στα σημεία που αναφέρεται. Το αποτέλεσμα είναι ο πηγαίος κώδικας που μεταγλωττίζεται είναι λίγο διαφορετικός απο αυτόν που υπάρχει στο αρχείο. Π.χ.: αν έχουμε τον κώδικα > #include <stdio.h> #define PI 3.14159 int main(void) { printf("PI=%f\n", PI); } στην ουσία ο παρακάτω κώδικας θα μεταγλωττιστεί: > #include <stdio.h> int main(void) { printf("PI=%f\n", 3.14159); }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.