Przestrzenie nazw
Warianty
Działania

Preprocesor

Z cppreference.com
< cpp
 
 
Język C++
Ogólne
Preprocesor
Komentarze
Kontrola sterowania
Instrukcje wykonania warunkowego
Pętle
Instrukcje skoku
Funkcje
Deklaracja funkcji
Deklaracja funkcji lambda
Znacznik inline
Specyfikacja wyjątków (przestarzałe)
Znacznik noexcept (C++11)
Wyjątki
Przestrzenie nazw
Typy
Znaczniki
decltype (C++11)
auto (C++11)
alignas (C++11)
Znaczniki sposobu przechowywania
Inicjalizacja
Wyrażenia
Alternatywne reprezentacje
Literały
Boolowskie - Całkowite - Zmiennoprzecinkowe
Znakowe - String - nullptr (C++11)
Definiowane przez użytkownika (C++11)
Narzędzia
Atrybuty (C++11)
Types
Deklaracja typedef
Deklaracja alasu typu (C++11)
Casts
Konwersja niejawna - Konwersja jawna
static_cast - dynamic_cast
const_cast - reinterpret_cast
Alokacja pamięci
Klasy
Własności funkcji składowych
Specjalne funkcje składowe
Szablony
Różne
 
 

Preprocesor zostaje wykonany w 4 fazie translacji, przed kompilacją. Wynikiem preprocesora jest pojedynczy plik, który potem jest przekazywany do właściwego kompilatora.

Spis treści

[edytuj] Dyrektywy

Dyrektywy preprocesora kontrolują jego zachowanie. Każda dyrektywa zajmuje jedną linię i ma następujący format:

  • znak #
  • instrukcja preprocessingu (jedno z: define, undef, include, if, ifdef, ifndef, else, elif, endif, line, error, pragma) [1]
  • argumenty (zależne od instrukcji)
  • koniec linii

Pusta dyrektywa (# następujący nową linią) jest dozwolona i nie daje żadnego efektu.

[edytuj] Możliwości

Preprocesor ma możliwość translacji plików źródłowych:

  • warunkowe kompilowanie części pliku źródłowego (kontrolowane przez dyrektywę #if, #ifdef, #ifndef, #else, #elif oraz #endif).
  • zamienianie makr tekstowych, również z możliwością przyłączenia (konkatenacji) lub zamykania między znaki "" indentyfikatorów (kontrolowane przez dyrektywy #define i #undef, oraz operatory # i ##)
  • przyłączanie innych plików (kontrolowane przez dyrektywę #include i sprawdzane za pomocą __has_include (od C++17))
  • rzucenie błędu error (kontrolowane przez dyrektywę #error)

Następujące aspekty preprocesora mogą być kontrolowane:

[edytuj] Przypisy

  1. Są to dyrektywy zdefiniowane przez standard. Standard nie definiuje zachowania innych dyrektyw: mogą zostać one zignorowane, mieć jakieś specjalne znaczenie albo spowodować error w trakcie kompilacji. Jeśli zostaną zignorowane, zostaną też usunięte z kodu źródłowego, kiedy preprocesor skończy swoje zadanie. Popularną, niezawartą w standardzie dyrektywą jest #warning, które emituje ostrzeżenie, z informacją zdefiniowaną przez użytkownika podczas kompilacji.

[edytuj] Zobacz także

C documentation for preprocessor