C Förprocessor och makron

I denna handledning kommer du att introduceras till c förprocessorer, och du lär dig att använda #include, #define och villkorlig kompilering med hjälp av exempel.

C-förprocessorn är en makroförprocessor (låter dig definiera makron) som förvandlar ditt program innan det kompileras. Dessa omvandlingar kan vara inkludering av rubrikfil, makroutvidgningar etc.

Alla förbehandlingsdirektiv börjar med en #symbol. Till exempel,

 #define PI 3.14

Några av de vanliga användningarna av C-förprocessorn är:

Inklusive header Files: #include

Det #includepreprocessorn används för att inkludera header-filer till C-program. Till exempel,

 #include 

Här stdio.här en rubrikfil. Det #includedirektiv preprocessor ersätter ovanstående linje med innehållet i stdio.hrubrikfilen.

Det är anledningen till att du måste använda #include innan du kan använda funktioner som scanf()och printf().

Du kan också skapa din egen rubrikfil som innehåller funktionsdeklaration och inkludera den i ditt program med detta förprocessordirektiv.

 #include "my_header.h"

Besök den här sidan för att lära dig mer om hur du använder rubrikfiler.

Makron med #define

Ett makro är ett kodfragment som får ett namn. Du kan definiera ett makro i C med hjälp av #defineförprocessordirektivet.

Här är ett exempel.

 #define c 299792458 // speed of light

Här, när vi använder c i vårt program, ersätts det med 299792458.

Exempel 1: #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; )

Fungerar som makron

Du kan också definiera makron som fungerar på liknande sätt som ett funktionsanrop. Detta kallas funktionsliknande makron. Till exempel,

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

Varje gång programmet möts circleArea(argument)ersätts det med (3.1415*(argument)*(argument)).

Antag att vi klarat 5 som ett argument sedan, det expanderar enligt nedan:

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

Exempel 2: Använd #define preprocessor

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

Besök den här sidan för att lära dig mer om makron och #define preprocessor.

Villkorlig sammanställning

I C-programmering kan du instruera förprocessorn om du ska inkludera ett kodblock eller inte. För att göra detta kan villkorliga direktiv användas.

Det liknar ett ifuttalande med en stor skillnad.

Det ifuttalande testas under exekveringstiden för att kontrollera om ett block av kod ska utföras eller inte, medan de villkors används för att inkludera (eller hoppa över) ett block med kod i programmet före avrättningen.

Användning av villkorad

  • använd annan kod beroende på maskin, operativsystem
  • sammanställa samma källfil i två olika program
  • att utesluta viss kod från programmet men att behålla den som referens för framtida ändamål

Hur använder jag villkorligt?

Om du vill använda villkorlig, #ifdef, #if, #defined, #elseoch #elseifär direktiv används.

#ifdef-direktivet

 #ifdef MACRO // conditional codes #endif 

Här ingår villkorliga koder i programmet endast om MACRO är definierat.

#if, #elif och #else-direktivet

 #if expression // conditional codes #endif 

Här är uttryck ett uttryck av heltalstyp (kan vara heltal, tecken, aritmetiskt uttryck, makron och så vidare).

Villkorliga koder ingår endast i programmet om uttrycket utvärderas till ett värde som inte är noll.

Det valfria #elsedirektivet kan användas med #ifdirektivet.

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

Du kan också lägga till kapslade villkor för din #if… #elseanvändning#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 

#definierad

Den speciella operatören #defined används för att testa om ett visst makro är definierat eller inte. Det används ofta med #if-direktivet.

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

Fördefinierade makron

Här är några fördefinierade makron i C-programmering.

Makro Värde
__DATE__ En sträng som innehåller det aktuella datumet
__FILE__ En sträng som innehåller filnamnet
__LINE__ Ett heltal som representerar det aktuella radnumret
__STDC__ Om följer ANSI-standard C, är värdet ett icke-noll heltal
__TIME__ En sträng som innehåller det aktuella datumet.

Exempel 3: Få aktuell tid med __TIME__

Följande program matar ut aktuell tid med hjälp av __TIME__makro.

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

Produktion

 Aktuell tid: 19:54:39

Rekommenderade avläsningar

  • Linjekontroll
  • Pragmas
  • Förprocessorutgång
  • Andra direktiv

Intressanta artiklar...