Стандартные библиотечные функции устанавливают errno для предоставления контекста. Мы используем его для устранения неоднозначности.
Но что я могу сделать с функциями в моей программе? Я хочу написать что-то вроде этого:
void some_func(struct error *e, ...);
Указатель на локальную переменную передается функции, которая может завершиться с ошибкой. Если происходит сбой, он устанавливает контекст ошибки для переменной, переданной указателем.
Что важно, так это возможность предоставлять контекст при возникновении ошибки.
Как я могу это сделать?
Основная цель - написать гибкое программное обеспечение.
Ниже я кратко опишу свое исследование по поиску чего-то подходящего.
Я уже пытался реализовать структуру:
struct error {
enum error_type type;
char *msg;
};
Есть кое-что, в чем я не уверен - регистрация новых элементов перечисления error_type
. Я не уверен, что в следующем потоке нет рисков:
- Зарегистрировать новый тип ошибки в error.h
- Вернуть ошибку с этим типом из функции
Есть ли риски в этом потоке и каковы они? Могут ли они быть устранены?