У меня есть открытая функция, которая должна проверять правильность нескольких параметров, но эта функция также используется внутри некоторых других мест, в которых я знаю, что данные параметры будут действительными. Таким образом, мне интересно, что обходится дороже: 1) Оставьте проверки достоверности в каждой общедоступной функции, или 2) Выполните проверки достоверности в общедоступных функциях, но создайте частные / внутренние функции, которые не выполняют эту проверку (используйте публичные функции как оболочки для внутренних функций).
Слишком ли накладные расходы на вызов функции перевешивают выгоду от отсутствия необходимости выполнять избыточные проверки?
По сути, мой текущий код будет выглядеть следующим образом:
boolean foo(int* a, int* b, int* c)
{
if (!a || !b || !c) {
return FALSE;
}
<do the whatever foo does here>
}
boolean bar(int* a, int* b, int* c)
{
if (!a || !b || !c) {
return FALSE;
}
<do the whatever bar does here>
foo(a, b, c);
}
Таким образом, bar () проверяет a, b и c, потому что это открытая / публичная функция, но затем foo повторяет те же проверки. Будет ли эффективнее позволить этому произойти? или создать внутреннюю функцию по следующим направлениям:
static boolean foo_internal(int* a, int* b, int* c)
{
<do the whatever foo does here>
}
boolean foo(int* a, int* b, int* c)
{
if (!a || !b || !c) {
return FALSE;
}
foo_internal();
}
boolean bar(int* a, int* b, int* c)
{
if (!a || !b || !c) {
return FALSE;
}
<do the whatever bar does here>
foo_internal(a, b, c);
}
В первую очередь меня интересует эффективность кода C, но полезны также общие ответы / ответы, специфичные для других языков.
Спасибо!