Wszyscy wiemy czym jest preprocesor Cpp i jak działa1. Jest to narzędzie odziedziczone z języka C, operujące na tekście kodu programu, a tym samym nie mające żadnego pojęcia o składni i regułach języka jaki przetwarza. Jest narzędziem, które używane nierozważnie może z łatwością doprowadzić do klęski nasz program. A mimo to wciąż tak wiele programistów piszących swoje aplikacje w C++ go kocha.
Nagminne używanie preprocesora jest też częstym nawykiem wyniesionym z C i nadużywanym w C++.
Czytaj dalej
Można się zdziwić, ale makra również mogą posiadać zmienną liczbę argumentów, tak jak funkcje.
Najbardziej znaną funkcją o zmiennej licznie argumentów jest funkcja printf z standardowej biblioteki języka C:
int printf(const char* fmt, ...); Makra również posiadają taką możliwość, zwie się to, jak nazwa notki, - Variadic Macros.
Proste makro TRACE opakowujące printfa:
#define TRACE(fmt, ...) printf("%s:%d " fmt, __FILE__, __LINE__, __VA_ARGS__) i proste użycie:
TRACE("x=%d, y=%d", 1, 2); Kluczową role w tej konstrukcji pełni identyfikator __VA_ARGS__, który zostaje zamieniony na wszystkie ekstra argumenty, nie określone w definicji makra, a raczej określone przez .
Czytaj dalej