Używaj funkcji inline i stałych a nie makr

Osoby mające doświadczenie w kodowaniu w C często piszą

#define COUNT 50

albo

#define MAX(a,b) (a > b ? a : b)

Zapisy tego typu sprawiają jednak problemy - najpoważniejszym są problemy z kompilacją, które sprawiamy użytkownikom naszego kodu. Wyobraźmy sobie, że ktoś po dołączeniu naszego nagłówka będzie chciał zdefiniować własną stałą, funkcję czy metodę o nazwie MAX lub COUNT. W przypadku makr z parametrami zdarzają się też subtelniejsze problemy, wyobraźmy sobie, że ktoś napisał

MAX(++a, ++b);

Nie ma też żadnej kontroli typów.

Pisząc w C++, w większości przypadków możemy zastąpić makra równie wydajnymi ale bezpiecznymi instrukcjami tego języka. Dla przykładu

const int COUNT = 50;

oraz

template <class ParamType>
inline MAX(const ParamType& left, const ParamType& right)
{
   return left > right ? left : right;
}

Funkcje inline mają tę miłą cechę, że o ile w kodzie produkcyjnym (release) są rozwijane w miejscu wywołania tak samo jak makra (a więc równie wydajne), o tyle w wersjach debug mogą zostać zachowane jako niezależne wywołania (co pozwala np. umieścić w nich breakpoint).

komentarze obsługiwane przez Disqus