Как лучше обрабатывать ошибки? - C (СИ)
Формулировка задачи:
Как лучше обрабатывать ошибки в Си?
У меня науме только такой вариант. Допустим есть функция, которая выполняет сложение матриц.
Может лучше будет использовать какие-то выриант с глобальными переменными? Вроде как завести переменную error и походу выполнения функции закидывать в нее значение ошибки?
И еще вопрос как лучше для матриц проверять указатели? Написать какой-нибудь макрос с ассертами, чтобы можно было его просто выключить? Или писать отдельную BOOL функцию и по ее результату выполнять дальнейшие действия?
/* DATA TYPES */ typedef int BOOL; /* ERROR */ #define ERROR_OK 0 #define ERROR_SIZE -2 BOOL add (int ** lp_res, int ** lp_op, size_t nrow_res, size_t ncol_res, size_t nrow_op, size_t ncol_op) { int i = 0, j = 0; if (nrow_res != nrow_op || ncol_res != ncol_op) return ERROR_SIZE; for (i = 0; i < nrow_res; ++i) for (j = 0; j < ncol_res; ++j) lp_res[i][j] += lp_op[i][j]; return ERROR_OK; }
if (nrow_res != nrow_op || ncol_res != ncol_op) error = ERROR_SIZE; else for (i = 0; i < nrow_res; ++i) for (j = 0; j < ncol_res; ++j) lp_res[i][j] += lp_op[i][j];
Решение задачи: «Как лучше обрабатывать ошибки?»
textual
Листинг программы
void add_m (int ** lp_res, int ** lp_op, size_t nrow_res, size_t ncol_res, size_t nrow_op, size_t ncol_op) { int i = 0, j = 0; #ifdef _DEBUG /* check the validity of pointers */ check_matrix_memory(lp_res, nrow_res); /* assert(lp_res != NULL && lp_op != NULL); */ check_matrix_memory(lp_op, nrow_op); /* check the validity of sizes */ assert(nrow_res == nrow_op && ncol_res == ncol_op); #endif /* defined _DEBUG */ for (i = 0; i < nrow_res; ++i) for (j = 0; j < ncol_res; ++j) lp_res[i][j] += lp_op[i][j]; }
Объяснение кода листинга программы
- В данной функции происходит сложение двух матриц.
- Присваиваются значения для переменных:
- i = 0, j = 0;
- Проверяется правильность выделения памяти под матрицы и их размерность с помощью макроса assert.
- Происходит цикл по строкам первой матрицы.
- В каждой итерации происходит цикл по столбцам второй матрицы.
- Элементы матрицы lp_res[i][j] складываются с элементами матрицы lp_op[i][j].
- Результат сохраняется в элементе lp_res[i][j].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д