94 ROZDZIAŁ 12. PREPROCESOR – jeżeli kompilator jest zgodny ze standardem z 1999 makro ma wartość 199901L. Warto również wspomnieć o identyfikatorze func zdefiniowanym w standardzie C99, którego wartość to nazwa funkcji. Spróbujmy użyć tych makr w praktyce: #include #if __STDC_VERSION__ = 199901L /* Jezeli mamy do dyspozycji identyfikator __func__ wykorzystajmy go. */ # define BUG(message) fprintf(stderr, "%s:%d: %s (w funkcji %s)\n", \ __FILE__, __LINE__, message, __func__) #else /* Jezeli __func__ nie ma no to trudno. */ # define BUG(message) fprintf(stderr, "%s:%d: %s\n", \ __FILE__, __LINE__, message) #endif int main(void) { printf("Program ABC, data kompilacji: %s %s\n", __DATE__, __TIME__); BUG("Przykladowy komunikat bledu"); return 0; } Efekt działania programu, gdy kompilowany jest kompilatorem C99: Program ABC, data kompilacji: Sep 1 2008 19:12:13 test.c:17: Przykladowy komunikat bledu (w funkcji main) Gdy kompilowany jest kompilatorem ANSI C: Program ABC, data kompilacji: Sep 1 2008 19:13:16 test.c:17: Przykladowy komunikat bledu
... zobacz całą notatkę
Komentarze użytkowników (0)