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
#include
Preprocesora służy do włączenia do programu pliki nagłówkowe C. Na przykład,
#include
Tutaj stdio.h
jest plik nagłówkowy. #include
Dyrektywa preprocesora zastąpi powyższą linię z treścią stdio.h
pliku 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ą #define
dyrektywy 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 if
stwierdzenia z jedną zasadniczą różnicą.
if
Oś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
, #else
i #elseif
są 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 #else
dyrektywy można używać z #if
dyrektywą.
#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… #else
using#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