W tym samouczku zostaniesz wprowadzony do preprocesorów c i nauczysz się używać #include, #define i kompilacji warunkowej z pomocą przykładów.

Preprocesor C jest preprocesorem makr (umożliwia definiowanie makr), który przekształca program przed jego kompilacją. Te transformacje mogą obejmować dołączenie pliku nagłówkowego, rozszerzenia makr itp.
Wszystkie dyrektywy przetwarzania wstępnego zaczynają się od #symbolu. Na przykład,
#define PI 3.14
Niektóre z typowych zastosowań preprocesora C to:
W tym pliki nagłówkowe: #include
#includePreprocesora służy do włączenia do programu pliki nagłówkowe C. Na przykład,
#include
Tutaj stdio.hjest plik nagłówkowy. #includeDyrektywa preprocesora zastąpi powyższą linię z treścią stdio.hpliku nagłówka.
To jest powód, dla którego musisz użyć, #include zanim będziesz mógł używać funkcji takich jak scanf()i printf().
Możesz także utworzyć własny plik nagłówkowy zawierający deklarację funkcji i dołączyć go do 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 z #define
Makro to fragment kodu, któremu nadano nazwę. Możesz zdefiniować makro w C za pomocą #definedyrektywy preprocesora.
Oto przykład.
#define c 299792458 // speed of light
Tutaj, gdy używamy c w naszym programie, jest zastępowane przez 299792458.
Przykład 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; )
Działa jak makra
Możesz także zdefiniować makra, które działają podobnie jak wywołanie funkcji. Nazywa się to makrami podobnymi do funkcji. Na przykład,
#define circleArea(r) (3.1415*(r)*(r))
Za każdym razem, gdy program się spotyka circleArea(argument), jest zastępowany przez (3.1415*(argument)*(argument)).
Załóżmy, że przekazaliśmy 5 jako argument, a następnie rozwija się jak poniżej:
circleArea(5) expands to (3.1415*5*5)
Przykład 2: użycie #define preprocesora
#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; )
Odwiedź tę stronę, aby dowiedzieć się więcej o makrach i #define preprocesorze.
Kompilacja warunkowa
W programowaniu w C można poinstruować preprocesor, czy ma zawierać blok kodu, czy nie. Aby to zrobić, można użyć dyrektyw warunkowych.
Jest podobne do ifstwierdzenia z jedną zasadniczą różnicą.
ifOświadczenie jest testowany w czasie wykonywania w celu sprawdzenia, czy dany fragment kodu powinny być wykonywane lub nie natomiast, że warunkowe są wykorzystywane w celu włączenia (lub pomiń) blok kodu w programie przed egzekucją.
Zastosowania warunkowe
- użyj innego kodu w zależności od maszyny, systemu operacyjnego
- skompilować ten sam plik źródłowy w dwóch różnych programach
- aby wykluczyć określony kod z programu, ale zachować go jako odniesienie do przyszłych celów
Jak używać warunku?
Aby użyć warunkowe, #ifdef, #if, #defined, #elsei #elseifsą wykorzystywane dyrektyw.
Dyrektywa #ifdef
#ifdef MACRO // conditional codes #endif
Tutaj kody warunkowe są zawarte w programie tylko wtedy, gdy zdefiniowano MAKRO.
Dyrektywa #if, #elif i #else
#if expression // conditional codes #endif
Tutaj wyrażenie jest wyrażeniem typu całkowitego (mogą to być liczby całkowite, znaki, wyrażenie arytmetyczne, makra itd.).
Kody warunkowe są uwzględniane w programie tylko wtedy, gdy wartość wyrażenia jest różna od zera.
Opcjonalnej #elsedyrektywy można używać z #ifdyrektywą.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
Możesz również dodać zagnieżdżony warunek do swojego #if… #elseusing#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 służy do sprawdzania, czy określone makro jest zdefiniowane, czy nie. Jest często używany z dyrektywą #if.
#if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes
Predefiniowane makra
Oto kilka wstępnie zdefiniowanych makr w programowaniu w C.
| Makro | Wartość |
|---|---|
__DATE__ | Ciąg zawierający aktualną datę |
__FILE__ | Ciąg zawierający nazwę pliku |
__LINE__ | Liczba całkowita reprezentująca numer bieżącego wiersza |
__STDC__ | Jeśli jest zgodny ze standardem ANSI C, wartość jest niezerową liczbą całkowitą |
__TIME__ | Ciąg zawierający aktualną datę. |
Przykład 3: pobierz aktualny czas za pomocą __TIME__
Poniższy program wyprowadza bieżący czas za pomocą __TIME__makra.
#include int main() ( printf("Current time: %s",__TIME__); )
Wynik
Aktualny czas: 19:54:39
Zalecane lektury
- Kontrola linii
- Pragmy
- Wyjście preprocesora
- Inne dyrektywy








