Makra w C++

napotkałem się na makra w C++ i proszę o wyjaśnienie otrzymanych wyników:

Makro nie wykonuje kodu od tego jest funkcja. To co w nawiasie idzie w miejsce jako r, czyli:

ad3 tutaj masz POST inkrementacje - w tej linii i jest dalej 2

ALE (patrz 2linia postu), wywołujesz i++ 2x, bo 2x masz r we wzorze, więc i=4

ad4 tutaj jest pre inkrementacje więc i jest o 1 większe (musisz doliczyć do co dodałeś wyżej więc i=6), ale liczysz kolejno więc w połowie i=5

i=4 = AREA(i+1) - 3,14*++4*++5 więc masz - 3,14*5*6

 

Powiesz, “ale ja mam w cout co innego”, no masz, bo cout najpierw liczy to co ma wyświetlić, a potem wrzuca wynik (masz następną instrukcję więc widzisz już wynik obliczeń, czyli zmieniłeś i nim je zdążyłeś wyświetlić)

zatem najpierw wykonują się obliczenia na podstawie i, a potem dopiero wyświetlona zostanie wartość i już po inkrementacji;

dzięki za wyjaśnienie

Reguły rozwijania makr są trochę bardziej skomplikowane niż opisujesz (ale ta, w podstawowych scenariuszach jest mniej więcej tak, jak piszesz; trzeba pamiętać, że preprocesor najzwyczajniej w świecie robi coś na kształt string-replace). Ale ważniejsze jest to, że używasz parametrów makra bez nawiasów. To zawsze powoduje problemy. :wink:

Dzięki Ryan i drobok :slight_smile: