Для человека может и не трагично, но ИАР отказывается серфить проект (в частности, показывать места определения переменных). Попробую пояснить, но этот способ программирования тяжеловат для понимания... Х-макросы не просто используются, они используются "тотально"
Для описания распределения выводов контроллера (>45)
INPUT ( CountersIn , P4 , 0x03u )
OUTPUT ( Valve , P4 , 0x04u )
Для описания переменных в настройках (>100)
SETUP_DATA ( Contrast , "Contrast" , "" , DEFAULT_CONTRAST , MAX_CONTRAST )
для описания ошибок устройства (>30)
ERROR (x, CanAEmpty, "Canister A empty" , "Gebinde A leer! " , PressEnter , 0x01 )
для описания автоматов состояний (>100)
STATE ( AirDeleteA , "Air out A" , "Entl"uuml"ften A" , CLR+STN )
для описания многоязычных сообщений(сотни)
MLMESSAGE (mlLanguage , "English " , "Deutsch " /*, "Italiano " , "Franзais " */ )
для описания прочей фигни
SENSOR ( TankBelowFull , "Tank not full" , "AC,A0" , GetAdc(TankFullAdc) > se.TankFullLevel )
Макросы разворачиваются и в файлах C, и в хедерах, в результате корректировок как правило происходит полная перекомпиляция проекта - около 30 с. Это до фига, когда работаешь над проектом.
Но все отбивается потом, когда через год требуется внести исправления - все прозрачно и понятно.
Поскольку в одном вокспейсе несколько проектов, файлы с макросами свои подменяются:
#ifdef PCB_VERB
#define PINS_HEADER "c2__pins_verb.h"
#define SENSORS_HEADER "c2__sensors_b.h"
#endif
#ifdef PCB_VERA
#define PINS_HEADER "c2__pins_vera.h"
#define SENSORS_HEADER "c2__sensors_a.h"
#endif
#define SETUP_HEADER "c2__setup.h"
#define STAT_HEADER "c2__statistic.h"
#define ERRORS_HEADER "c2__errors.h"
#define ML_HEADER "c2__ml.h"
Вот и получается - какие нахрен предкомпилированные хедеры?