Способы ASSERT выражений во время сборки в C

Я убираю некоторый старый код, который повсеместно использует «магические числа» для установки аппаратных регистров, и я хотел бы использовать константы вместо этих чисел, чтобы сделать код несколько более выразительным (на самом деле они будут отображаться на имена / значения, используемые для документирования регистров).

Тем не менее, я обеспокоен тем, что с объемом изменений я мог бы сломать магические числа. Вот упрощенный пример (набор регистров более сложный):

const short mode0 = 0;
const short mode1 = 1;
const short mode2 = 2;

const short state0 = 0;
const short state1 = 4;
const short state2 = 8;

так что вместо:

set_register(5);

у нас есть:

set_register(state1|mode1);

То, что я ищу, этовремя сборки версия:

ASSERT(5==(state1|mode1));

Обновить

@Christian, спасибо за быстрый ответ, мне тоже интересен ответ в среде C / non-boost, потому что это код драйвера / ядра.

Ответы на вопрос(10)

Ваш ответ на вопрос