Preprocesor C jest preprocesorem makr (pozwala definiować makra), który przekształca program przed jego kompilacją. Przekształcenia te mogą polegać na dołączeniu pliku nagłówkowego, rozszerzeniu makr itp.

Wszystkie dyrektywy preprocesora zaczynają się od symbolu #. Na przykład,

#define PI 3.14

Niektóre z powszechnych zastosowań preprocesora C to:

Włączanie plików nagłówkowych: #include

Preprocesor #include jest używany do dołączania plików nagłówkowych do programów C. Na przykład,

#include <stdio.h>

Tutaj, stdio.h jest plikiem nagłówkowym. Dyrektywa preprocesora #include zastępuje powyższy wiersz zawartością pliku nagłówkowego stdio.h.

To jest powód, dla którego musisz użyć #include <stdio.h>, zanim będziesz mógł użyć funkcji takich jak scanf() i printf().

Możesz również utworzyć własny plik nagłówkowy zawierający deklarację funkcji i dołączyć go do swojego programu za pomocą tej dyrektywy preprocesora.

#include "my_header.h"

Odwiedź tę stronę, aby dowiedzieć się więcej o używaniu plików nagłówkowych.

Makra używające #define

Makro jest fragmentem kodu, któremu nadano nazwę. Makro można zdefiniować w języku C za pomocą dyrektywy #define preprocesora.

Oto przykład.

#define c 299792458 // speed of light

Gdy w naszym programie używamy c, jest ono zastępowane przez 299792458.

Przykład 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;}

Makra funkcyjne

Można również zdefiniować makra, które działają w podobny sposób jak wywołanie funkcji. Jest to znane jako makra podobne do funkcji. Na przykład,

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

Za każdym razem, gdy program napotyka circleArea(argument), jest on zastępowany przez (3.1415*(argument)*(argument)).

Przypuśćmy, że przekazaliśmy 5 jako argument, wtedy, interpretuje to jak poniżej:

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

Przykład 2: Użycie #define preprocesora

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

Odwiedź tę stronę, aby dowiedzieć się więcej o makrach i #define preprocesora.

Kompilacja warunkowa

W programowaniu C, możesz poinstruować preprocesor, czy dołączyć blok kodu, czy nie. Aby to zrobić, można użyć dyrektyw warunkowych.

Jest to podobne do instrukcji if z jedną zasadniczą różnicą.

Konstrukcja if jest testowana w czasie wykonywania, aby sprawdzić, czy blok kodu powinien być wykonany, czy nie, podczas gdy dyrektywy warunkowe są używane do włączenia (lub pominięcia) bloku kodu w programie przed wykonaniem.

Usługi warunkowe

  • używaj różnego kodu w zależności od maszyny, systemu operacyjnego
  • kompiluj ten sam plik źródłowy w dwóch różnych programach
  • wyłącz pewien kod z programu, ale zachowaj go jako odniesienie dla przyszłych celów

Jak używać warunkowych?

Aby użyć warunkowego, używane są dyrektywy #ifdef, #if, #defined, #else i #elseif.

#ifdef Dyrektywa

#ifdef MACRO // conditional codes#endif

Tutaj, kody warunkowe są włączane do programu tylko wtedy, gdy zdefiniowane jest MACRO.

#if, #elif i #else Dyrektywa

#if expression // conditional codes#endif

Tutaj, wyrażenie jest wyrażeniem typu całkowitego (mogą to być liczby całkowite, znaki, wyrażenia arytmetyczne, makra i tak dalej).

Kody warunkowe są włączane do programu tylko wtedy, gdy wyrażenie jest obliczane na wartość niezerową.

Opcjonalna dyrektywa #else może być używana z dyrektywą #if.

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

Możesz również dodać zagnieżdżone warunkowe do swoich #if...#else używając #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

Specjalny operator #defined jest używany do testowania czy pewne makro jest zdefiniowane czy nie. Jest on często używany z dyrektywą #if.

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

Makra predefiniowane

Oto niektóre makra predefiniowane w programowaniu w języku C.

Makro Wartość
__DATE__ Łańcuch zawierający bieżącą datę
__FILE__ A. łańcuch zawierający nazwę pliku
__LINE__ Liczba całkowita reprezentująca bieżący numer wiersza
__STDC__ Jeśli jest zgodny ze standardem ANSI C, to wartością jest niezerowa liczba całkowita
__TIME__ łańcuch zawierający bieżącą datę.

Przykład 3: Uzyskaj bieżący czas używając __TIME__

Poniższy program wyprowadza bieżący czas używając makra __TIME__.

#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }

Output

Current time: 19:54:39

Zalecane lektury

  • Kontrola linii
  • Pragmaty
  • Wyjście preprocesora
  • Inne dyrektywy

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.