Как говорил Нил, проверка является обязанностью звонящего.Вы сказали:
представляется целесообразным включить внутренние меры предосторожности на случай, если вызывающая сторона делает что-то глупое.
Чтобы описать, почему это не идеальный подход, я остановлюсь наПример Нейла, в котором использовалась проверка на нулевые указатели, передаваемые strlen
, представляет два сценария:
- Функция, которая вызывает
strlen
, предварительно проверяет ввод. strlen
проверяетсвои аргументы внутренне, прежде чем оперировать ими.
Нет никакой разницы в эффективности между этими двумя методами, если вы делаете один вызов strlen
.Однако представьте, что вместо одного вызова strlen
вы вызываете strlen
, strstr
и другие строковые функции несколько раз подряд.В сценарии 1, независимо от того, совершаете ли вы 1, 2, 10 или 100 вызовов функций из строковой библиотеки, вы должны проверять наличие неправильных входных данных только один раз.В сценарии 2 каждый вызов вынужден проверять ввод, что значительно замедляет процесс.