А с магическими числами в программировании ты(вы) знаком? Это - убийственно плохая практика программирования, когда вместо понятных констант используются сразу подставленные числа, а потом, когда надо это число поменять, его надо везде искать по коду и исправлять, но не перепутать с другим.
Образно, вот написали мы что-то там типа BlaBla.27, а потом почему-то нам надо 27 поменять на 24, которое тоже было использовано в коде в разных местах. Ну, например, какую-то тревогу (для которой был бит), надо вставить именно вот в это место. И дальше нам надо поискать в коде все места с 27, замменить их на 24, но не перепутать эти "новые" 24 со "старыми" 24, которые относятся не к тому. В таких задачах даже полнтекстовый поиск по всему проекту может не помочь.
Чтобы такого не было, правильная практика программирования предлагает выносить всё в константы. Сейчас, к примеру, я достал исходники одного своего проекта на СИ++ из 2003 года (да, 20 лет прошло!), кое-чего там исправляю, и мучаюсь в некоторых местах из-за магических чисел.
Как мудрый камрад, я бы предложил перевести обсуждение вот к чему: как корректно и красиво адресовать битовые маски, если их много. Ведь я сам не нашёл ничего умнее (и это сарказм), чем их просто поименовать и наплодить цифры.
Варианты:
а) Обозвать маски по именам типа BitsAlarmsMain, BitsAlarmsDevices. Но тогда есть риск, что их всё равно не хватит, или что биты тревог будут идти оп последовательно (и панель их не прочитает групповым запросом). Я его отмёл.
б) Накатать вообще какую-то хbтромутную функцию вида GetBit/SetBit, которая будет обращаться к глобальной переменной структуры панели оператора целиком и принимать на входе описание нужного бита в виде адресации НомерDWORD/НомерБИТА, закрученной в структуру и константу. Вот это я бы попробовал.
Тогда код выглядел бы как SetOPBit(AlarmsILCStatusUPS, TRUE), а в "AlarmsILCStatusUPS" было бы описано, что на деле это DWORD номер 4, бит 18ый.
Надо так попробовать, хаха! =)





Ответить с цитированием