Τι στο καλό είναι αυτό το define-C;!

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό stamatiou » 15 Ιουν 2011, 22:28

Βρε παιδιά, στην C τι ρόλο βαρά το #define;!
Ευχαριστώ πολύ...
Τελευταία επεξεργασία από Epirotes και 16 Ιουν 2011, 00:15, έχει επεξεργασθεί 1 φορά/ες συνολικά
Αιτία: Διόρθωση τίτλου!
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τι στο καλό τείναι αυτό το define-C;!

Δημοσίευσηαπό Qdata » 16 Ιουν 2011, 00:03

Η οδηγία #define ορίζει ένα αναγνωριστικό και ένα σύνολο χαρακτήρων που θα αντικαταστήσει αυτό το αναγνωριστικό κατά τη διάρκεια της μεταγλώττισης του πηγαίου κώδικα.Η σύνταξη της οδηγίας είναι:

#define αναγνωριστικό χαρακτήρες

όπου το αναγνωριστικό αντικαθιστάτε στο στάδιο της μεταγλώττισης από τους χαρακτήρες, σε όποιο σημείο του πηγαίου κώδικα και αν βρεθεί.
Συνήθως χρησιμοποιούμε την οδηγία #define για να ορίσουμε κάποιες σταθερές του προγράμματός μας.

Off topic:
Στο μέλλον αν έχεις κάποια απορία που αφορά την γλώσσα προγραμματισμού C ή C++ ρώτα σε αυτό το θέμα=> viewtopic.php?f=6&t=18969 :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό Star_Light » 16 Ιουν 2011, 01:58

εγινε. Και εγω απαντησα στο νημα που εβαλε ο Qdata.... συμπληρωματικα.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό stamatiou » 16 Ιουν 2011, 10:11

Qdata έγραψε:Η οδηγία #define ορίζει ένα αναγνωριστικό και ένα σύνολο χαρακτήρων που θα αντικαταστήσει αυτό το αναγνωριστικό κατά τη διάρκεια της μεταγλώττισης του πηγαίου κώδικα.Η σύνταξη της οδηγίας είναι:

#define αναγνωριστικό χαρακτήρες

όπου το αναγνωριστικό αντικαθιστάτε στο στάδιο της μεταγλώττισης από τους χαρακτήρες, σε όποιο σημείο του πηγαίου κώδικα και αν βρεθεί.
Συνήθως χρησιμοποιούμε την οδηγία #define για να ορίσουμε κάποιες σταθερές του προγράμματός μας.

Off topic:
Στο μέλλον αν έχεις κάποια απορία που αφορά την γλώσσα προγραμματισμού C ή C++ ρώτα σε αυτό το θέμα=> viewtopic.php?f=6&t=18969 :)

Σαν variables δηλαδή;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό Qdata » 16 Ιουν 2011, 11:03

stamatiou έγραψε:Σαν variables δηλαδή;


Όχι μεταβλητή αλλά το αντίθετο: Σταθερά!Πχ δίνεις:


Κώδικας: Επιλογή όλων
#define PI 3.14159265

main()
{
int x = 2;
float xpix;
xpix = PI*x;
printf("%f\n", xpix);
}


Όπου PI το αναγνωριστικό και 3.14159265 οι χαρακτήρες ή αλλιώς η τιμή που αποδίδεται στο αναγνωριστικό.Η τιμή του PI δεν πρόκειται να αλλάξει μέσα στο πρόγραμμα.Δηλαδή με την οδηγία #define ορίζεις μια σταθερά.Εγώ έδωσα σαν σταθερά το PI(π) που όπως θα ξέρεις στα μαθηματικά δεν αλλάζει ποτέ.Δηλαδή αν κάνεις ένα πρόγραμμα που υπολογίζει εμβαδόν κύκλου μπορείς να χρησιμοποιήσεις το PI ως σταθερά(δηλώνοντάς το με την οδηγία #define) αφού δεν θα χρειαστεί μέσα στο πρόγραμμα να πάρει μια άλλη τιμή. :)

Μεταφέρθηκε στην κατάλληλη ενότητα!

Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό stamatiou » 16 Ιουν 2011, 15:52

Qdata έγραψε:
stamatiou έγραψε:Σαν variables δηλαδή;


Όχι μεταβλητή αλλά το αντίθετο: Σταθερά!Πχ δίνεις:


Κώδικας: Επιλογή όλων
#define PI 3.14159265

main()
{
int x = 2;
float xpix;
xpix = PI*x;
printf("%f\n", xpix);
}


Όπου PI το αναγνωριστικό και 3.14159265 οι χαρακτήρες ή αλλιώς η τιμή που αποδίδεται στο αναγνωριστικό.Η τιμή του PI δεν πρόκειται να αλλάξει μέσα στο πρόγραμμα.Δηλαδή με την οδηγία #define ορίζεις μια σταθερά.Εγώ έδωσα σαν σταθερά το PI(π) που όπως θα ξέρεις στα μαθηματικά δεν αλλάζει ποτέ.Δηλαδή αν κάνεις ένα πρόγραμμα που υπολογίζει εμβαδόν κύκλου μπορείς να χρησιμοποιήσεις το PI ως σταθερά(δηλώνοντάς το με την οδηγία #define) αφού δεν θα χρειαστεί μέσα στο πρόγραμμα να πάρει μια άλλη τιμή. :)

Μεταφέρθηκε στην κατάλληλη ενότητα!


Και γιατί να μην χρησιμοποιήσω int;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό Qdata » 16 Ιουν 2011, 16:07

Αν χρησιμοποιήσεις int η μεταβλητή ισχύει μόνο για εκείνη την συνάρτηση(local variable - τοπική μεταβλητή):

Κώδικας: Επιλογή όλων
#include <stdio.h>

main()
{
int x = 2;
printf("%d\n", x);
fuction1();
}
fuction1()
{
printf("%d\n", x);
}



Κώδικας: Επιλογή όλων
$ gcc test.c -o test
tsst.c: In function ‘fuction1’:
tsst.c:12:17: error: ‘x’ undeclared (first use in this function)
tsst.c:12:17: note: each undeclared identifier is reported only once for each function it appears in


Ενώ με την οδηγία #define αναγνωρίζετε από κάθε συνάρτηση:

Κώδικας: Επιλογή όλων
#include <stdio.h>
#define x 2

main()
{
printf("%d\n", x);
fuction1();
}
fuction1()
{
printf("%d\n", x);
}


Κώδικας: Επιλογή όλων
$ gcc test.c -o test
$ ./test
2
2


Κατάλαβες; :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό pc_magas » 16 Ιουν 2011, 16:12

Ακόμα αν δηλώσεις static int θα δεσμεύσεις χώρο στην μνήμη σου ενώ άμα δηλώσεις με define όχι ακόμα μπορείς με αυτό να κάνεισ ένα header να μην δηλώνεται μέσα σε ένα πρόγραμμα πολλές φορές. Ακόμα ποιο έύκολο είναι να θυμάσαι ένα συνθηματικό όνομα παρά μια τιμή όταν την χρησιμοποιείς συχνά.
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό stamatiou » 16 Ιουν 2011, 16:15

Ευχαριστώ πολύ παιδιά, πραγματικά με βοηθήσατε πάρα πολύ!
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τι στο καλό είναι αυτό το define-C;!

Δημοσίευσηαπό Dimitris » 26 Ιουν 2011, 16:28

Το #define δεν όριζει απλώς μια σταθερά. Οτιδήποτε έρχεται με # είναι preprocessor directive. Δηλαδή ο κώδικας με # περνάει πρώτα από τον προμεταγλωττιστή που είναι ένα υποσύνολο της C και ουσιαστικά τροποποιεί τον πηγαίο κώδικα. Δηλαδή το #define PI 3.14 κάνει το εξης: διαβαζει τον κώδικα και αντικαθιστά όπου PI το 3.14. Μετά από αυτή την τροποποίηση, αρχίζει η μεταγλώττιση. Γι'αυτό φαίνεται το PI σαν σταθερά. Γι'αυτό και δε δεσμέυεις μνήμη. Γιατί στην πραγματικότητα η "μεταβλήτη" PI δεν υπάρχει κατά το run time. Μπορείς με την επιλογή -E του compiler να δεις το αποτέλεσμα του preprocessor.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι