Например, состояния машины состояний UI:
Код
STATE (stMIN_DISCHARGE , fMinDischarge , "Min Discharge" , "Min. Entnahme" , CLR+STN+OLD )
Поля макроса потом разворачиваются в соответствующие enum и инициализацию массивов функций, указателей на текст, признаков и проч.
Всем доволен(разве что время компиляции увеличивается), но есть вопрос
Очень желательно, чтобы из записи типа:
SENSOR ( LOW_OUTPUT_PRESSURE , 0x0001 , "Low out press" , "DC,A0" )
получилось
#define bitLOW_OUTPUT_PRESSURE 0x0001
Проблема в том, что define - резервированное слово и препроцессор его анализирует на первом же этапе, и соответственно генерирует ошибку.
Обошел проблему генерацией массива констант, но это увеличивает объем используемой памяти и замедляет работу иногда это критично.