VL (05.04.2015 09:10, просмотров: 1) ответил Олдфаг на Использую всегда и широко. Для ускорения работы и исключения ошибок при множественном создании однородных сущностей. И, поскольку это макросы, без дифайна в них обойтись нельзя. Для автоматического создания прототипов функций, для создания
Это все понятно, возможно, я выразился настолько неуклюже, что оскорбил тем самым тонкий слух профессионала. Есть конкретный вопрос с дифайнами и енумами, можете помочь? Есть список состояний прибора, типа такого:
STATE ( ServiceRequest , "Service request" , "Service notwend." , CLR+STN )
STATE ( StoreProcess , "Store process" , "Prozess sichern" , 0 )
STATE ( SwitchOffRequest , "switch OFF?" , "Dosierung aus?" , CLR+STN )
STATE ( SwitchOffState , "----- OFF ----- " , "Dosierung = AUS!" , CLR )
STATE ( SwitchOnState , " Switch ON ?" , "Dosierung ein?" , CLR+STN )
Фрагменты этого списка используются для организации меню (параметры - имя меню, первое состояние меню, последнее состояние меню):
MENU ( Test, TestPumps, TestInterfaces )
MENU ( Service, EditConcentration, EditSetupValue )
Я смог определить эти параметры определяются только через enum:
// definitions of start state
#define STATE(name, engl, germ, prop)
#define MENU(name,start_,end_) enum { st##name##Begin=st##start_};
#include STATES_HEADER
#undef MENU
// definitions of end state
#define MENU(name,start_,end_) enum { st##name##End=st##end_};
#include STATES_HEADER
#undef MENU
//definitions of the size of menu
#define MENU(name,start_,end_) enum { name##Qty=st##name##End - st##name##Begin + 1 };
#include STATES_HEADER
#undef MENU
#undef STATE
Но возникает предупреждение из-за сравнения величин, относящихся к разным enum, это предупреждение нужно блокировать для всего проекта (ИАР!), в результате в других местах не проверяются типы enum и получается потенциальная угроза ошибки.
Как Вы решаете такие проблемы?