C-preprocessorn är en makropreprocessor (låter dig definiera makron) som omvandlar ditt program innan det kompileras. Dessa omvandlingar kan vara att inkludera headerfiler, makroexpansioner etc.
Alla förbehandlingsdirektiv börjar med en #
-symbol. Till exempel,
#define PI 3.14
Vissa vanliga användningsområden för C preprocessor är:
- Inkludering av headerfiler: #include
- Makroer med hjälp av #define
- Exempel 1: #define preprocessor
- Funktionsliknande makron
- Exempel 2: Användning av #define preprocessor
- Konditionell kompilering
- Användningar av villkorlig
- Hur använder man villkorlig?
- #ifdef-direktivet
- #if, #elif och #else-direktivet
- #defined
- Predefinierade makron
- Exempel 3: Få aktuell tid med hjälp av __TIME__
- Rekommenderad läsning
Inkludering av headerfiler: #include
Preprocessorn #include
används för att inkludera headerfiler i C-program. Till exempel,
#include <stdio.h>
Här är stdio.h
en headerfil. Preprocessordirektivet #include
ersätter ovanstående rad med innehållet i stdio.h
headerfil.
Det är anledningen till att du måste använda #include <stdio.h>
innan du kan använda funktioner som scanf()
och printf()
.
Du kan också skapa en egen headerfil som innehåller funktionsdeklarationer och inkludera den i ditt program med hjälp av detta preprocessordirektiv.
#include "my_header.h"
Besök den här sidan för att lära dig mer om hur man använder headerfiler.
Makroer med hjälp av #define
Ett makro är ett kodfragment som får ett namn. Du kan definiera ett makro i C med hjälp av preprocessordirektivet #define
.
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 <stdio.h>#define PI 3.1415int 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;}
Funktionsliknande makron
Du kan också definiera makron som fungerar på ett liknande sätt som ett funktionsanrop. Detta är känt som funktionsliknande makron. Till exempel,
#define circleArea(r) (3.1415*(r)*(r))
Varje gång programmet stöter på circleArea(argument)
ersätts det med (3.1415*(argument)*(argument))
.
Antag att vi överlämnade 5 som argument då expanderar det enligt nedan:
circleArea(5) expands to (3.1415*5*5)
Exempel 2: Användning av #define preprocessor
#include <stdio.h>#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.
Konditionell kompilering
I C-programmering kan du instruera preprocessorn om den ska inkludera ett block av kod eller inte. För att göra detta kan villkorliga direktiv användas.
Det liknar ett if
-meddelande med en stor skillnad.
Det if
-meddelandet testas under exekveringstiden för att kontrollera om ett kodblock ska exekveras eller inte, medan de villkorliga direktiven används för att inkludera (eller hoppa över) ett kodblock i ditt program innan det exekveras.
Användningar av villkorlig
- använda olika kod beroende på maskin, operativsystem
- kompilera 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 man villkorlig?
För att använda conditional används direktiven #ifdef
, #if
, #defined
, #else
och #elseif
.
#ifdef-direktivet
#ifdef MACRO // conditional codes#endif
Här inkluderas de villkorliga koderna i programmet endast om MACRO är definierat.
#if, #elif och #else-direktivet
#if expression // conditional codes#endif
Här är uttrycket ett uttryck av heltalstyp (kan vara heltal, tecken, aritmetiska uttryck, makron och så vidare).
De villkorliga koderna inkluderas i programmet endast om uttrycket utvärderas till ett värde som inte är noll.
Det valfria #else
-direktivet kan användas tillsammans med #if
-direktivet.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
Du kan också lägga till inbäddade villkorskoder i ditt #if...#else
med hjälp av #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
Den speciella operatören #defined används för att testa om ett visst makro är definierat eller inte. Den används ofta tillsammans med #if-direktivet.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Predefinierade makron
Här finns några fördefinierade makron i C-programmering.
Makro | Värde |
---|---|
__DATE__ |
En sträng som innehåller det aktuella datumet |
__FILE__ |
A sträng som innehåller filnamnet |
__LINE__ |
Ett heltal som representerar det aktuella radnumret |
__STDC__ |
Om det följer ANSI-standard C, är värdet ett heltal som inte är noll |
__TIME__ |
En sträng som innehåller det aktuella datumet. |
Exempel 3: Få aktuell tid med hjälp av __TIME__
Följande program ger ut aktuell tid med hjälp av makro __TIME__
.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Output
Current time: 19:54:39
Rekommenderad läsning
- Linjekontroll
- Pragmer
- Förberedelseutgång
- Andra direktiv