@Zellily

Чем плохо проверять аргумент функции на допустимые значения внутри функции?

Я пишу что-то типа самодельного драйвера для работы с некоторым устройством. В качестве аргумента функции передаю делитель частоты. Делитель должен быть чётным. Поэтому внутри функции я проверяю, что аргумент делится на два, и если нет - выбрасываю ассёрт.
Начальник говорит, что это неправильно. Что надо либо передавать в функцию делитель, умноженный на два (тогда делить придётся лишний раз), либо завести отдельный enum под допустимые значения делителя (а их очень много, этих значений).

Чем плох ассёрт внутри такой функции?
  • Вопрос задан
  • 365 просмотров
Пригласить эксперта
Ответы на вопрос 4
@res2001
Developer, ex-admin
assert в драйвере - это как-то перебор.
Просто обнуляйте младший бит принудительно и будет у вас всегда четное число.
А в инструкции опишите, что значение приводится к ближайшему меньшему четному.
Для 1 байтового значения это будет так:
val & 0xfe
Ответ написан
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Вы заменяете условием то, что делается в два сдвига.
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
а проверить, работает ли оно как положено

Частоту задают при инициализации девайса. Меняют редко.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы