Основываясь на ответах на предыдущий question, вот конструкция простой системы отчетов об ошибках для моего встроенного приложения C. Я был бы признателен за некоторые отзывы.Является ли это хорошим решением для отчетов об ошибках для встроенного приложения C?
У моего приложения есть код, формирующий общую программу плюс несколько уровней библиотек более низкого уровня. На самом низком уровне библиотека получает байт для использования для кодов ошибок, поэтому 255 ошибок. Они будут закодированы в перечислении, как:
enum lib1ErrorCodes {
ERR_NO_ERROR,
ERR_NO_CONNECTION,
...
ERR_MISC
};
Это передается по цепи либо через глобальную переменную:
unsigned char lib1ErrNo;
Следующий более высокий уровень содержит коды ошибок для библиотек, которые она использует:
enum lib2ErrorCodes {
ERR_NO_ERROR,
ERR_LIB1,
ERR_FILE_EXISTS,
...
ERR_MISC
}
обнаружена ошибка Lib1 и попадает в переменной ошибки в этом уровне:
unsigned char lib2ErrNo = ERR_LIB1;
На верхнем уровне, когда она становится время, чтобы сообщить все это пользователю, они обнаружены:
if (lib3ErrNo == ERR_LIB2)
if (lib2ErrNo == ERR_LIB1)
printf("Error %d: %s", lib1ErrNo, lib1ErrDesc);
Только негативы я могу думать в этой схеме является необходимость выделить несколько коды ошибок в каждой библиотеке, чтобы указать на библиотеки под ним, а для программы верхнего уровня включить все эти уровни для своих кодов ошибок.
Каков подходящий способ сделать это, если это не так?
Я хочу:
- Unique распространения ошибки вплоть до верхнего уровня, так что я могу сообщить о ней.
- Предпочтительно не проходить вокруг больших структур, так как это встроенное приложение.
Я предполагаю, что в рамках этой системы мне нужно будет активно управлять, какие библиотеки получают, какие диапазоны ошибок, правильно? Что относительно сторонних библиотек, которыми я не контролирую? – jparker
Вы догадываетесь правильно. Что касается сторонних библиотек, я полагаю, что каждая из них имеет свою собственную логику. – mouviciel
Точка против этой стратегии заключается в том, что она создает скрытые зависимости между модулями. Я говорю, свести к минимуму сцепление. –