В нашем проекте мы имеем сотню идентификаторов, используемую для кодов ошибок, например:Простота обслуживание таблицы идентификатора против текста
#define SYS_FAIL_EXCEP_PREFETCH_ABORT 0
#define SYS_FAIL_EXCEP_DATA_ABORT 1
#define SYS_FAIL_EXCEP_RESET 2
#define SYS_FAIL_EXCEP_UNDEFINED 3
#define SYS_FAIL_EXCEP_RESERVED 4
#define SYS_FAIL_EXCEP_IRQ_UNVECTORED 5
Одним из наших требований является печать имени или текста идентификатора. Мы используем таблицу поиска для этого:
typedef struct HAL_Map_Text_ID_struct
{
unsigned int id;
char const * const text;
} HAL_Map_Text_ID_t;
static const HAL_Map_Text_ID_t system_failure_text_id_map[] =
{
// ID Text
// The following text has the prefix SYS_FAIL_EXCEP_
{SYS_FAIL_EXCEP_PREFETCH_ABORT, "PREFETCH_ABORT"},
{SYS_FAIL_EXCEP_DATA_ABORT, "DATA_ABORT"},
{SYS_FAIL_EXCEP_RESET, "RESET"},
{SYS_FAIL_EXCEP_UNDEFINED, "UNDEFINED"},
{SYS_FAIL_EXCEP_RESERVED, "RESERVED"},
{SYS_FAIL_EXCEP_IRQ_UNVECTORED, "IRQ_UNVECTORED"},
};
Наша проблема в том, что таблица и список кодов ошибок могут быть синхронизированы, когда кто-то добавляет идентификатор, но забывает обновлять таблицу.
Есть ли идиома или другой процесс, в котором мы можем добавить идентификатор, и таблица будет обновляться автоматически?
Мы предпочли бы решение, в котором идентификаторы находятся в файле заголовка, а таблица находится в исходном файле.
Также, если возможно, решение должно быть совместимым с MISRA.
(Мы используем C89 с IAR Embedded Workbench с целевой системой, используя процессор ARM7.)
Если само название было бы приемлемой строкой, возможно, вы могли бы ее укрепить. – Jiminion
Почему таблица не синхронизирована, а не просто отсутствует запись? Иногда добавляются ли записи в середине? – Jiminion