在我們的項目中,我們有數百個標識符用於錯誤代碼,例如:易於維護表與文本
#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