Προεπεξεργαστής και μακροεντολές

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

Ο προεπεξεργαστής C είναι ένας μακροεπεξεργαστής μακροεντολών (σας επιτρέπει να ορίσετε μακροεντολές) που μετασχηματίζει το πρόγραμμά σας πριν από τη σύνταξη. Αυτοί οι μετασχηματισμοί μπορούν να είναι η συμπερίληψη του αρχείου κεφαλίδας, των επεκτάσεων μακροεντολών κ.λπ.

Όλες οι οδηγίες προεπεξεργασίας ξεκινούν με ένα #σύμβολο. Για παράδειγμα,

 #define PI 3.14

Μερικές από τις κοινές χρήσεις του προεπεξεργαστή C είναι:

Συμπεριλαμβανομένων αρχείων κεφαλίδας: #include

Ο #includeπροεπεξεργαστής χρησιμοποιείται για να περιλαμβάνει αρχεία κεφαλίδας σε προγράμματα C. Για παράδειγμα,

 #include 

Εδώ, stdio.hείναι ένα αρχείο κεφαλίδας. Η #includeοδηγία προεπεξεργαστή αντικαθιστά την παραπάνω γραμμή με τα περιεχόμενα του stdio.hαρχείου κεφαλίδας.

Αυτός είναι ο λόγος για τον οποίο πρέπει να χρησιμοποιήσετε #include για να μπορέσετε να χρησιμοποιήσετε λειτουργίες όπως scanf()και printf().

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

 #include "my_header.h"

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

Μακροεντολές χρησιμοποιώντας #define

Μια μακροεντολή είναι ένα κομμάτι κώδικα που έχει ένα όνομα. Μπορείτε να ορίσετε μια μακροεντολή σε C χρησιμοποιώντας την #defineοδηγία προεπεξεργαστή.

Εδώ είναι ένα παράδειγμα.

 #define c 299792458 // speed of light

Εδώ, όταν χρησιμοποιούμε το c στο πρόγραμμά μας, αντικαθίσταται με 299792458.

Παράδειγμα 1: # καθορισμός προεπεξεργαστή

 #include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; )

Λειτουργεί όπως οι μακροεντολές

Μπορείτε επίσης να ορίσετε μακροεντολές που λειτουργούν με παρόμοιο τρόπο όπως μια κλήση συνάρτησης. Αυτό είναι γνωστό ως μακροεντολές τύπου λειτουργίας. Για παράδειγμα,

 #define circleArea(r) (3.1415*(r)*(r))

Κάθε φορά που συναντά το πρόγραμμα circleArea(argument), αντικαθίσταται από το (3.1415*(argument)*(argument)).

Ας υποθέσουμε, περάσαμε το 5 ως επιχείρημα, επεκτείνεται όπως παρακάτω:

 circleArea(5) expands to (3.1415*5*5)

Παράδειγμα 2: Χρήση του #define προεπεξεργαστή

 #include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )

Επισκεφθείτε αυτήν τη σελίδα για να μάθετε περισσότερα σχετικά με τις μακροεντολές και τον # καθορισμό προεπεξεργαστή.

Συγγραφή υπό όρους

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

Είναι παρόμοιο με μια ifδήλωση με μια σημαντική διαφορά.

Η ifδήλωση ελέγχεται κατά τη διάρκεια του χρόνου εκτέλεσης για να ελέγξει εάν ένα μπλοκ κώδικα πρέπει να εκτελεστεί ή όχι, ενώ οι προϋποθέσεις χρησιμοποιούνται για να συμπεριλάβουν (ή να παραλείψουν) ένα μπλοκ κώδικα στο πρόγραμμά σας πριν από την εκτέλεση.

Χρήσεις υπό όρους

  • Χρησιμοποιήστε διαφορετικό κωδικό ανάλογα με το μηχάνημα, το λειτουργικό σύστημα
  • μεταγλωττίστε το ίδιο αρχείο προέλευσης σε δύο διαφορετικά προγράμματα
  • να εξαιρέσει ορισμένο κώδικα από το πρόγραμμα αλλά να τον κρατήσει ως αναφορά για μελλοντικό σκοπό

Πώς να χρησιμοποιήσετε υπό όρους;

Για να χρησιμοποιήσετε την προϋπόθεση, #ifdef, #if, #defined, #elseκαι #elseifοι οδηγίες χρησιμοποιούνται.

#ifdef Οδηγία

 #ifdef MACRO // conditional codes #endif 

Εδώ, οι κωδικοί υπό όρους περιλαμβάνονται στο πρόγραμμα μόνο εάν ορίζεται το MACRO.

#if, #elif και #else Οδηγία

 #if expression // conditional codes #endif 

Εδώ, η έκφραση είναι μια έκφραση ακέραιου τύπου (μπορεί να είναι ακέραιοι, χαρακτήρες, αριθμητική έκφραση, μακροεντολές και ούτω καθεξής).

Οι κωδικοί υπό όρους περιλαμβάνονται στο πρόγραμμα μόνο εάν η έκφραση αξιολογείται σε μη μηδενική τιμή.

Η προαιρετική #elseοδηγία μπορεί να χρησιμοποιηθεί με #ifοδηγία.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

Μπορείτε επίσης να προσθέσετε ένθετο υπό όρους στη #if… #elseχρήση σας#elif

 #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif 

#ορίζεται

Ο ειδικός τελεστής #defined χρησιμοποιείται για να ελέγξει εάν μια συγκεκριμένη μακροεντολή έχει οριστεί ή όχι. Χρησιμοποιείται συχνά με οδηγία #if.

 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes 

Προκαθορισμένες μακροεντολές

Ακολουθούν ορισμένες προκαθορισμένες μακροεντολές στον προγραμματισμό Γ.

Μακροεντολή αξία
__DATE__ Μια συμβολοσειρά που περιέχει την τρέχουσα ημερομηνία
__FILE__ Μια συμβολοσειρά που περιέχει το όνομα του αρχείου
__LINE__ Ένας ακέραιος αριθμός που αντιπροσωπεύει τον τρέχοντα αριθμό γραμμής
__STDC__ Εάν ακολουθεί το πρότυπο C ANSI, τότε η τιμή είναι μη μηδενικός ακέραιος
__TIME__ Μια συμβολοσειρά που περιέχει την τρέχουσα ημερομηνία.

Παράδειγμα 3: Λάβετε την τρέχουσα ώρα χρησιμοποιώντας __TIME__

Το ακόλουθο πρόγραμμα εξάγει την τρέχουσα ώρα χρησιμοποιώντας __TIME__μακροεντολή.

 #include int main() ( printf("Current time: %s",__TIME__); )

Παραγωγή

 Τρέχουσα ώρα: 19:54:39

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

  • Έλεγχος γραμμής
  • Πράγματα
  • Έξοδος προεπεξεργαστή
  • Άλλες οδηγίες

ενδιαφέροντα άρθρα...