ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 июля
590400 Топик полностью
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 и получается потенциальная угроза ошибки. Как Вы решаете такие проблемы?