91
DYREKTYWA PREPROCESORA
Wyświetla tekst, zawarty w cudzysłowach, jako ostrzeżenie. Jest często używany do sygnalizacji programiście, że dana część programu jest przestarzała lub może sprawiać problemy.
Przykład:
#varning "To jest bardzo prosty program"
Spowoduje to takie oto zachowanie kompilatora:
test.c:3:2: uarning: \#varning “To jest bardzo prosty program’’
Użycie dyrektywy #warning nie przerywa procesu kompilacji i służy tylko do wyświetlania komunikatów dla programisty w czasie kompilacji programu.
Powoduje wyzcrowame licznika linii kompilatora, który jest używany przy wyświetlaniu opisu błędów kompilacji. Pozwala to na szybkie znalezienie możliwej przyczyny błędu w rozbudowanym programie.
Przykład:
printf ("Podaj wartość funkcji");
#line
printf ("W przedziale od 10 do 0\n); /1 tutaj jest błąd - brak cudzysłowu zamykającego 1/
Jeżeli teraz nastąpi pról>a skompilowania tego kodu to kompilator poinformuje, że wystąpił błąd składni w lini 1. a nie np. 258.
Preprocesor języka C umożliwia też tworzenie makr, czyli automatycznie wykonywanych czynności. Makra deklaruje się za pomocą dyrektywy #define:
#define MAKR0(argl, arg2, ...) (wyrażenie)
W momencie wystąpienia MAKRA w tekście, preprocesor automatycznie zamieni makro na wyrażenie. Makra mogą być pewnego rodzaju alternatywami dla funkcji, ale powinno się ich używać tylko w specjalnych przypadkach. Ponieważ makro sprowadza się do prostego zastąpienia przez preprocesor wywołania makra przez jego tekst, jest !>ardzo podatne na trudne do zlokalizowania błędy (kompilator bętlzie podawał błędy w miejscach, w których nic nie widzimy lx> preprocesor wstawił tam tekst). Makra są szybsze (nie następuje wywołanie funkcji, które zawsze zajmuje trochę czasu1), ale też mniej bezpieczne i elastyczne niż funkcje.
Przeanalizujmy teraz fragment kodu:
Tnk naprawdę wg .standardu C99 tanieje możliwość napisania funkcji, której kod także liędzic wstawiany w miejscu wywołania. Odbywa się to dzięki inlinc.