3.3 Predefiniowane nazwy (makra) preprocesora

Jak wspominaliśmy, każdy preprocesor związany z kompilatorem C++ definiuje makro __cplusplus, a związany z kompilatorem czystego, standardowego C nazwę __STDC__. Nie są to jedyne takie predefiniowane makra.

Niezależnie od platformy powinny zawsze być zdefiniowane niektóre nazwy (makra) — na początku i końcu występują zwykle podwójne podkreślniki. Nazwy te mają przypisane wartości, którymi zostanie zastąpione każde ich wystąpienie w tekście programu :

__LINE__
: numer aktualnej linii programu w postaci stałej całkowitej;
__FILE__
: napis zawierający nazwę pliku źródłowego;
__DATE__
: napis zawierający datę kompilacji;
__TIME__
: napis zawierający godzinę kompilacji;
__FUNCTION__
: napis zawierający nazwę funkcji w której makro zostało użyte.
Ostanie makro (__FUNCTION__) formalnie nie jest standardowe, ale zwykle jest zaimplementowane. Przykład użycia tych predefiniowanych nazw znajdujemy w poniższym programiku:


P10: dataczas.cpp     Predefiniowane nazwy preprocesora

      1.  #include <iostream>
      2.  using namespace std;
      3.  
      4.  int main() {
      5.      cout << "Plik:    " << __FILE__     << endl
      6.           << "Data:    " << __DATE__     << endl
      7.           << "Linia:   " << __LINE__     << endl
      8.           << "Czas:    " << __TIME__     << endl
      9.           << "Funkcja: " << __FUNCTION__ << endl;
     10.  }

którego kompilacja i uruchomienie miało następujący przebieg:

    cpp> g++ -o dataczas dataczas.cpp
    cpp> ./dataczas
    Plik:    dataczas.cpp
    Data:    Sep 21 2012
    Linia:   7
    Czas:    22:44:29
    Funkcja: main
    cpp>

T.R. Werner, 21 lutego 2016; 20:17