Assert

Ostatnio dowiedziałem się o bardzo fajnej funkcji jaką udostępnia biblioteka standardowa, czyli o funkcji Assert. Funkcja ta ma tę zaletę, że warunek, który jej przekazujemy jest sprawdzany tylko, gdy jest umieścimy definicje NDEBUG. Wtedy, gdy warunek zwróci fałsz, zostaje wyświetlone okienko, gdzie i kiedy miało zdarzenie. W przeciwnym wypadku, gdy nie zdefiniujemy NDEBUG, sprawdzanie warunku po prostu znika, dzięki czemu osiągamy większą wydajność.

Oczywiście standardowa makrodefinicja nie jest idealna, ponieważ wyświetla różne rodzaje okienka w zależności od tego, czy używamy main czy WinMain. Ale napisanie swojego odpowiednika tej funkcji nie nastręcza problemów, wystarczy się przyjrzeć makrodefinicji zawartej w pliku assert.h. Polecam również artykuł w książce Perełki Programowania Gier część pierwsza, rozdział 1.12. Są tam świetne porady na ten temat.

2 Comments

  1. Reg:

    Jakie NODEBUG?! Chyba o Lunuksie mówisz.

    W Visual C++ makro assert kompiluje się w konfiguracji Debug, a w Release nie. Pod spodem to działa tak, że kompiluje się wtedy, kiedy zdefiniowane jest makro _DEBUG.

  2. Netrix:

    Zaglądałem do pliku assert.h w katalogu C:\Program Files\Microsoft Visual Studio 9.0\VC\include, i tam jest wyraźnie napisane:

    #ifdef NDEBUG

    #define assert(_Expression) ((void)0)

    #else

Leave a comment