Sposoby ASSERT wyrażeń w czasie kompilacji w C
Uprzątam trochę starszego kodu, który używa „magicznych liczb” w dowolnym miejscu do ustawiania rejestrów sprzętowych, i chciałbym używać stałych zamiast tych liczb, aby kod był bardziej ekspresyjny (w rzeczywistości będą mapować nazwy / wartości używane do dokumentowania rejestrów).
Jednak obawiam się, że z ilością zmian mogę złamać magiczne liczby. Oto uproszczony przykład (zestaw rejestrów jest bardziej złożony):
const short mode0 = 0;
const short mode1 = 1;
const short mode2 = 2;
const short state0 = 0;
const short state1 = 4;
const short state2 = 8;
więc zamiast:
set_register(5);
mamy:
set_register(state1|mode1);
To czego szukam to aczas budowy wersja:
ASSERT(5==(state1|mode1));
Aktualizacja
@Christian, dzięki za szybką odpowiedź, interesuje mnie również odpowiedź na środowisko C / non-Boost, ponieważ jest to kod sterownika / jądra.