C низкоуровневая проверка аргументов функции
Скажем, у нас есть какая-то функция, и мы хотим проверить аргументы. Например, чтобы не быть NULL:
void* myFunction(char* str1, char* str2){
if(str1==NULL || str2==NULL) return NULL;
...
}
Мой вопрос заключается в том, что называется хорошей проверкой низкого уровня (API), как это делается стандартными библиотеками Си.
Благодарю.
2 ответа
С - это то, что ты спрашиваешь, это то, что ты получаешь, язык с большим количеством веревок, чтобы повеситься, и очень мало защитных сетей. Возьмем, к примеру, эту реализацию strcpy от Apple, но все они очень похожи:
char *strcpy(char *s1, const char *s2)
{
char *s = s1;
while ((*s++ = *s2++) != 0)
;
return (s1);
}
Поскольку C не знает концепции исключений, все сообщения об ошибках должны выполняться через возвращаемое значение функции, а иногда и через глобальную переменную errno, что, конечно, несколько ограничивает выразительность ошибок.
Итак, если вы хотите соответствовать тому, что делает стандартная библиотека, безопасность должна быть очень низкой.
Главное - "делай, что говоришь" и "говори, что делаешь". "То, что вы говорите" необходимо четко описать. Описание должно быть в документации, но также может быть в комментариях или имени функции или имени параметра.
Установив требование, убедитесь, что вы соответствуете этому требованию. Если вы определяете случаи ошибок для перехвата, убедитесь, что вызывающий может определить это с помощью errno
или иным образом.