Это, скорее всего, вопрос стиля и традиций кода, но вопрос в следующем.Проверка аргументов перед вызовом функции, известной для проверки самих аргументов
Давайте предположим, что у нас есть функция, которая проверяет аргументы, например:
int do_something(int * arr) {
if (arr == NULL) {
printf("arr is NULL\n");
return -1;
}
...
Теперь мы будем использовать его. Вопрос: мы должны проверить аргумент, который мы собираемся передать ему? Ибо это все равно проверит.
Пример довольно упрощен, сценарии реальной жизни могут быть намного сложнее, с большим количеством аргументов (и более сложными проверками) и дополнительными дополнительными накладными расходами, вызванными вызовом функции - если это, скажем, какой-то IPC.
Таким образом, более общий вопрос: каковы общие принципы и практика в отношении таких ситуаций?
Существует только один ответ: это зависит. –
Вы должны, вероятно, сделать разумные тесты в вызывающем. Если вызываемая функция находится в одной и той же единице перевода (или используется LTO), дублированный тест может быть оптимизирован компилятором, и если вызываемая функция * not * в той же системе перевода, вам не нужно будет проверять больше, чем прототип функции, чтобы иметь возможность его вызвать. – EOF
@ MichaelWalz, но что я должен обратить внимание и рассмотреть? – olegst