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

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

Lämna ett svar

Din e-postadress kommer inte publiceras.