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 или иным образом.

Другие вопросы по тегам