C Priekšapstrādātājs un makro

Šajā apmācībā jūs iepazīstinās ar c priekšapstrādātājiem, un jūs ar piemēriem iemācīsieties izmantot #include, #define un nosacītu kompilāciju.

C priekšapstrādes procesors ir makro priekšapstrādes process (ļauj definēt makro), kas pārveido programmu pirms tās sastādīšanas. Šīs transformācijas var būt galvenes faila iekļaušana, makro paplašinājumi utt.

Visas priekšapstrādes direktīvas sākas ar #simbolu. Piemēram,

 #define PI 3.14

Daži no C priekšapstrādes procesora izplatītākajiem lietojumiem ir:

Ieskaitot galvenes failus: #include

#includePreprocessor tiek izmantots, lai iekļautu header failus C programmas. Piemēram,

 #include 

Šeit stdio.hir galvenes fails. #includeApstrādātāju direktīva aizstāj iepriekš minēto līniju ar saturu stdio.hheader failu.

Tas ir iemesls, kāpēc jums jāizmanto, #include pirms varat izmantot tādas funkcijas kā scanf()un printf().

Varat arī izveidot pats savu galvenes failu ar funkciju deklarāciju un iekļaut to savā programmā, izmantojot šo priekšapstrādātāja direktīvu.

 #include "my_header.h"

Apmeklējiet šo lapu, lai uzzinātu vairāk par galvenes failu izmantošanu.

Makro, izmantojot #define

Makro ir koda fragments, kuram tiek piešķirts nosaukums. Izmantojot #definepriekšprocesora direktīvu , C var definēt makro .

Lūk, piemērs.

 #define c 299792458 // speed of light

Šeit, kad mēs savā programmā izmantojam c, tas tiek aizstāts ar 299792458.

1. piemērs: #define preprocessor

 #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; )

Funkcija kā makro

Varat arī definēt makro, kas darbojas līdzīgi kā funkciju izsaukums. Tas ir pazīstams kā funkcijai līdzīgi makro. Piemēram,

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

Katru reizi, kad programma sastopas circleArea(argument), tā tiek aizstāta ar (3.1415*(argument)*(argument)).

Pieņemsim, ka tad mēs izturējām 5 kā argumentu, un tas tiek paplašināts šādi:

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

2. piemērs: #define preprocessor izmantošana

 #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; )

Apmeklējiet šo lapu, lai uzzinātu vairāk par makro un #define preprocessor.

Nosacīta kompilācija

Programmējot C, jūs varat norādīt priekšapstrādātājam, vai iekļaut koda bloku. Lai to izdarītu, var izmantot nosacītās direktīvas.

Tas ir līdzīgs ifpaziņojumam ar vienu būtisku atšķirību.

ifApgalvojums tiek pārbaudīta laikā izpildes laiku, lai pārbaudītu, vai bloka kods ir izpildīts vai ne tā, kā conditionals tiek izmantoti, lai iekļautu (vai izlaist) bloku kodu savā programmā pirms to izpildes.

Nosacījuma izmantošana

  • izmantojiet atšķirīgu kodu atkarībā no iekārtas, operētājsistēmas
  • apkopot to pašu avota failu divās dažādās programmās
  • izslēgt noteiktu kodu no programmas, bet saglabāt to kā atsauci turpmākajiem mērķiem

Kā lietot nosacīto?

Lai izmantotu nosacījumu, #ifdef, #if, #defined, #elseun #elseifdirektīvas tiek izmantoti.

#ifdef direktīva

 #ifdef MACRO // conditional codes #endif 

Šeit nosacītie kodi tiek iekļauti programmā tikai tad, ja ir definēts MACRO.

#if, #elif un #else direktīva

 #if expression // conditional codes #endif 

Šeit izteiksme ir vesela skaitļa veida izteiksme (var būt veseli skaitļi, rakstzīmes, aritmētiskā izteiksme, makro un tā tālāk).

Nosacītie kodi tiek iekļauti programmā tikai tad, ja izteiksme tiek vērtēta ar vērtību, kas nav nulle.

Izvēles #elsedirektīvu var izmantot kopā ar #ifdirektīvu.

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

Varat arī pievienot ligzdotu nosacījumu savai #if… #elselietošanai#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

Īpašais operators #defined tiek izmantots, lai pārbaudītu, vai noteikts makro ir definēts. To bieži lieto kopā ar direktīvu #if.

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

Iepriekš definēti makro

Šeit ir daži iepriekš definēti makro C programmēšanā.

Makro Vērtība
__DATE__ Virkne ar pašreizējo datumu
__FILE__ Virkne, kas satur faila nosaukumu
__LINE__ Vesels skaitlis, kas apzīmē pašreizējo rindas numuru
__STDC__ Ja tiek ievērots ANSI standarts C, vērtība ir vesels skaitlis, kas nav nulle
__TIME__ Virkne ar pašreizējo datumu.

3. piemērs: iegūstiet pašreizējo laiku, izmantojot __TIME__

Tālāk norādītā programma izvada pašreizējo laiku, izmantojot __TIME__makro.

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

Rezultāts

 Pašreizējais laiks: 19:54:39

Ieteicamie lasījumi

  • Līnijas vadība
  • Pragmas
  • Pirmsprocesora izeja
  • Citas direktīvas

Interesanti raksti...