#makra

wszystkie notatki oznaczone etykietą "makra"

Nadużywanie preprocesora w C++

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

Variadic macros

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