Preprocesor
Z cppreference.com
< cpp
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:
- zachowanie zdefiniowane przez implementację (kontrolowane przez dyrektywę #pragma oraz operator _Pragma (od C++11))
- informacje o nazwie pliku oraz linii dostępne dla preprocesora (kontrolowane przez dyrektywę #line)
[edytuj] Przypisy
- ↑ 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
|