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.

questionAnswers(10)

yourAnswerToTheQuestion