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