Wprowadzenie do dyrektyw preprocesora w C

Najczęściej jest to błędne przekonanie, że Preprocesory lub makra są częścią kompilacji programu, ale jest całkowicie błędne. Dyrektywy preprocesora są rodzajem makr i fazą przed kompilacją. Można powiedzieć, że jest to zestaw instrukcji przekazanych kompilatorowi w celu przeprowadzenia rzeczywistej kompilacji. Są one również znane jako dłuższe skróty konstrukcyjne dla makr, co oznacza, że ​​wartość w makrach zostaje zastąpiona segmentem kodów. Makro jest zdefiniowane specjalnym symbolem i ma symbol zaczynający się od „#”. Dlatego te #-Define są rodzajem specjalnego preprocesora, po którym następuje sam kompilator. W tym temacie dowiemy się o dyrektywach preprocesora w C.

Preprocesor ma specjalny typ reprezentacji do identyfikacji, tak jak każda dyrektywa preprocesora inicjuje się specjalnym symbolem „#”, po którym następuje identyfikator, a następnie nazwa dyrektywy. Biała spacja jest również dozwolona przed i po #. Na przykład # include.

Istnieją pewne pasowania lub udogodnienia, które Preprocesor C może zapewnić:

  • Pliki nagłówkowe: włączenie plików nagłówkowych jest sposobem na zastąpienie deklaracji składnią programu i treścią programu.
  • Rozwijanie makr: Definiowanie makr jest jak skrócenie fragmentu kodu, który preprocesor C zastępuje makra ich odpowiednimi definicjami.
  • Kompilacja według warunków: Zgodnie z różnymi scenariuszami lub różnymi warunkami włączenie niektórych części programu jest możliwe poprzez kompilację warunkową.
  • Kontrola linii: Jeśli używasz programu do łączenia lub przestawiania kogoś lub większej liczby plików źródłowych w plik pośredni do kompilacji, możesz użyć kontroli linii do poinformowania kompilatora o pochodzeniu każdej linii źródłowej.

Rodzaje dyrektyw preprocesora

Wszystkie typy dyrektyw preprocesora są następujące:

  1. # definiować
  2. # zawierać
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # gdyby
  7. #jeszcze
  8. #elif
  9. #endif
  10. #błąd
  11. #pragma

1. #define (Makra)

Makro to fragment kodu, który jest zastępowany przez pewną wartość kodu makra. Każde makro jest najczęściej opisywane i definiowane przez dyrektywę #define.

Składnia:

#define token value

Istnieją dwa rodzaje makr:

  • Makra funkcyjne
  • Makra obiektowe
Makra funkcyjne

Funkcja makro jak działa prawie jak wywołanie funkcji.

Na przykład:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX tutaj jest nazwą makra.

Przykład:

Wynik:

Makra obiektowe

Makra obiektowe to typ identyfikatora zastępowany wartością. Najczęściej jest używany do reprezentowania stałych liczbowych.

#define PI 3.1415

Tutaj wartość PI zostanie zastąpiona przez makro.


Wynik:

2. #include

Istnieje jeszcze inna funkcjonalność dla dyrektywy preprocesora dołączania. Ma swoje trzy warianty, które zastępują kod bieżącym kodem plików źródłowych.

Trzy warianty są następujące:

  • #zawierać
  • #include ”file”
  • Uwzględnij wszystko inne

#zawierać

Wyszukuje plik na zdefiniowanej liście systemu lub katalogów, jak określono, a następnie wyszukuje standardową listę bibliotek systemowych.

#include ”file”

Ten typ służy do tworzenia własnych plików nagłówkowych programu. Poszukiwany jest najpierw plik o nazwie file w bieżącym katalogu, a następnie systemowe pliki nagłówkowe i bieżące katalogi bieżącego pliku katalogu.

#włącz cokolwiek

Tego typu dyrektywa preprocesora dołączania jest używana, gdy żaden z pozostałych dwóch pozostałych typów dyrektywy i jej argumenty nie pasują i nie spełniają struktury obliczeniowej.

3. #Ifdef

Sprawdza, czy makro jest zdefiniowane przez # zdefiniuj, czy nie. Jeśli tak, wykona kod, inaczej nie.

Składnia:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Anulowanie definicji makra oznacza, że ​​jest niezdefiniowane i poprzedza je dyrektywa #undef.

Składnia:

#undef token

Wynik:

4. Ifndef

Ten procesor sprawdza, czy #define jest zdefiniowane przez #define. Jeśli tak, wykonuje kod.

Składnia:

#Ifndef MACRO
//code
#endif
#If

Ten procesor działa jak tylko pętla if, ocenia wyrażenie lub warunek. Jeśli warunek ma wartość true, kod zostanie wykonany w przeciwnym razie.

Składnia:

#if expression
//code
#endif
#else

Dyrektywa preprocesora #else służy do oceny wyrażenia lub warunku, jeśli warunek #if jest fałszywy. Można go używać z dyrektywami #if, #elif, #ifdef i #ifndef.

Składnia:

#if expression
//if body
#else
//else body
#endif

Przykład:

Wynik:

5. # Błąd

Jak sama nazwa wskazuje, dyrektywa o preprocesorze błędów jest używana do wskazania błędu, a następnie kompilator podaje błąd krytyczny, jeśli zostanie znaleziona dyrektywa o błędach i pomija kolejne kroki kompilacji.

Wynik:

6. #pragma

Zależy to od kompilatora, ponieważ różne systemy operacyjne i różne maszyny zapewniają wszystkie typy funkcji systemu operacyjnego, które są wykorzystywane przez kompilator do oferowania kompilatorowi dodatkowych informacji.

Składnia:

#pragma token

Przykład:

Wynik:

Każdy Preprocesor ma swoje znaczenie, podobnie jak dyrektywa warunkowa służy do sprawdzania, czy część programu ma zostać uwzględniona na podstawie scenariuszy, czy nie.

Załóżmy, że program chce się skompilować w określonym środowisku z określoną konfiguracją systemu operacyjnego, ale gdy tylko przejdzie do tej fazy kompilacji, zgłasza błąd lub może podać nieprawidłowy kod, dając po prostu programowi duże połączyć program i uruchomić go podczas wykonywania. Może być też inna możliwość, gdy ten sam plik źródłowy z dwoma różnymi programami może wykonać czasochłonną kontrolę spójności lub jej natychmiastowe dane lub wydrukować wartości danych podczas debugowania.

Te scenariusze, które można utworzyć za pomocą obliczeń, można również wykorzystać do uruchomienia na jednym komputerze za pomocą dyrektyw wstępnego przetwarzania.

Wniosek

Dane wyjściowe z Preprocesora C przypominają dane wejściowe, z tym wyjątkiem, że wszystkie dyrektywy przetwarzania wstępnego zostały zastąpione pustymi liniami lub białymi spacjami. Różne pliki i formaty mają różne składnie, mówiąc, że początek nowego pliku został utworzony, lub wskazując, że powrót do pliku lub przetwarzanie należy wykonać przed kompilacją.

Wszystkie scenariusze służą do informowania innych o mocy preprocesora C i jego ewolucji z różnymi wersjami kompilatora uruchomionymi ze standardami GCC i ANSI.

Polecane artykuły

Jest to przewodnik po dyrektywach preprocesora w C. Omawiamy typy dyrektyw preprocesora ze składnią i przykładami. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej-

  1. Odwróć liczbę w C.
  2. Sortowanie w C.
  3. Funkcja mieszania w C.
  4. Kontynuuj Instrukcja w C
  5. Sortowanie w C #
  6. Jak działa funkcja haszująca w php?