◐ Shell
clean mode source ↗

Preprocesor – cppreference.com

Z cppreference.com

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

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.

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:

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.

Zobacz także