Чем плохо проверять аргумент функции на допустимые значения внутри функции?
Я пишу что-то типа самодельного драйвера для работы с некоторым устройством. В качестве аргумента функции передаю делитель частоты. Делитель должен быть чётным. Поэтому внутри функции я проверяю, что аргумент делится на два, и если нет - выбрасываю ассёрт.
Начальник говорит, что это неправильно. Что надо либо передавать в функцию делитель, умноженный на два (тогда делить придётся лишний раз), либо завести отдельный enum под допустимые значения делителя (а их очень много, этих значений).
assert в драйвере - это как-то перебор.
Просто обнуляйте младший бит принудительно и будет у вас всегда четное число.
А в инструкции опишите, что значение приводится к ближайшему меньшему четному.
Для 1 байтового значения это будет так:
val & 0xfe
Частоту задают при инициализации девайса. Меняют редко. Так что на скорость не повлияет. А у программиста, который использует эту функцию, не будет граблей в виде "ой, я забыл, что надо удвоенный делитель подавать было".
Частоту задают при инициализации девайса. Меняют редко.
Так и нужно проверять частоту при настройке, что бы она могла делиться на чётное число, то есть была чётной. А с делителем не понятно: если это настройка — проверять, если нет — округлять.
> В качестве аргумента функции передаю делитель частоты.
Функции.
Проверяете на входе параметры, если что-то не нравится - возвращаете -1, ничего не производя в функции.
int function foo (int bar) {
if (bar & 1) return -1;
NewFreq = bar;
retutn 0;
}