[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Программирование на функциональных языках - как научить?



On Thu, Aug 20, 2009 at 11:32:04PM +0400, Alexey Pechnikov wrote:
> Hello!
> 
> On Thursday 20 August 2009 23:01:54 Eugene V. Lyubimkin wrote:
> > Это когда некоторый математик садится за компьютер и начинает программировать
> > алгоритм. А потом смотришь на код и понимаешь, что в проект (условно) его не
> > взять. Он чудовищен.
> 
> Хм, не задумывался, как мы пишем на С, но вроде откровенно ужасный код писали всего
> несколько студентов у нас... Теперь давайте по существу - а вы тесты пишете? ;-) 
> Если вас не затруднит, приведите примеры своих разработок на С (его все знают, как 
> эталон пойдет) - интересно увидеть и сравнить.
> 
> Из меня программист не ахти какой, моя работа больше архитектура ПО и алгоритмика, 
> тем не менее, приведу ссылочку на свой код, например
> http://mobigroup.ru/files/sqlite-ext/inet/
> Написано в "один проход", тем не менее, если где криво - пинайте, не стесняйтесь. 
> Заодно многим людям поможете - расширение уже используется в разных проектах.

Мои "две копейки" (не как профессионала IT, упаси боже).

Я не знаю, насколько в этом коде важна проверка аргументов на
правильность, но тем не менее я вижу, что в функциях isinnetNFunc()
маска подсети предполагается быть заданной либо

а) числом, занимающим не более 2-х позиций; либо
б) стандартной точечной записью.

Случай "б" парсится библиотечной функцией с проверкой на ошибку, что
есть ок. А вот случай "а", имхо, проверяется недостаточно. Более того,
для преобразования в число используется функция atoi(), котрая не дает
кода ошибки на выходе.

Что будет, например, с таким вызовом?

isinnet( '172.16.1.23', '172.16.1.0', 'aa' )

Имхо, переменная mask в этом случае окажется равной нулю (после всех
действий со сдвигами и пр.) и проверка в конце функции всегда вернет
true, не зависимо от ad и net.

-- 
Stanislav


Reply to: