Форум: "Прочее";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизКак молоды мы были, или смешные исходники :D Найти похожие ветки
← →
Джо © (2006-02-18 05:05) [40]> [37] Дмитрий Белькевич © (18.02.06 04:48)
> Есть такое страшное слово - refucktoring ;)
Ты не поверишь, я имею о нем представление. Даже знаю, кАк оно правильно пишется :)
← →
Sergey Masloff (2006-02-18 08:04) [41]Ученик чародея © (18.02.06 04:56) [38]
В двух местах минимум trt...finally не хватает
Я вообще-то имел в нечто большее и законченное. Этот код 1% от маленького проекта (или 0.00001% от большого) а ты на нем уже 2 предупреждения компилятора (минимум) пропустил...
← →
Ученик чародея © (2006-02-18 08:12) [42]>>Sergey Masloff (18.02.06 08:04) [41]
Вроде, компилятор не ругался. Да и на стабильность никто не жалуется. Хотя, у нас основная модель разработки - сделать быстро, чтобы работало(на стенде).
← →
Sergey Masloff (2006-02-18 08:18) [43]Ученик чародея © (18.02.06 08:12) [42]
Ругался-ругался ;-) Просто ты наверное хинты с варнингами отключил
Я на работе бьюсь - бьюсь с народом чтобы от этой порочной практики отошли...
Так-то код нормально читаемый. А защищенный блок вставить это времени не занимает, дело привычки. А чтоб ее выработать надо внимательно читать что компилятор пишет.
← →
Verg © (2006-02-18 08:43) [44]Не знаю про "смешные", но попадаются экземпляры сорта "танцы с бубном" :)
К таким относятся, к примеру, алгоритмы хеш функций. Например, хеш для МАС адресов:#define mix(a,b,c) \
do { \
a -= b; a -= c; a ^= (c >> 13); \
b -= c; b -= a; b ^= (a << 8); \
c -= a; c -= b; c ^= (b >> 13); \
a -= b; a -= c; a ^= (c >> 12); \
b -= c; b -= a; b ^= (a << 16); \
c -= a; c -= b; c ^= (b >> 5); \
a -= b; a -= c; a ^= (c >> 3); \
b -= c; b -= a; b ^= (a << 10); \
c -= a; c -= b; c ^= (b >> 15); \
} while (0)
static u_int32_t
mac_address_hash(struct ether_addr *addr)
{
u_int32_t a = 0x9e3779b9, b = 0x9e3779b9, c = sc_hashkey;
b += addr->ether_addr_octet[5] << 8;
b += addr->ether_addr_octet[4];
a += addr->ether_addr_octet[3] << 24;
a += addr->ether_addr_octet[2] << 16;
a += addr->ether_addr_octet[1] << 8;
a += addr->ether_addr_octet[0];
mix(a, b, c);
return (c & BRIDGE_RTABLE_MASK);
}
что происходит в mix? :)
← →
TUser © (2006-02-18 11:18) [45]> Ругался-ругался ;-) Просто ты наверное хинты с варнингами отключил Я на работе бьюсь - бьюсь с народом чтобы от этой порочной практики отошли...
Оффтоп. Стал обращать внимание, когда начал использовать dcc32. В IDE не страшно, а когда в консоли вываливается десяток-сотня Warnings, - неудобно как-то. Вот с тех пор и обнаружил, что компилятор не дурак и не просто так весь этот мусор пишет. Чего и всем желаю.
← →
kaZaNoVa © (2006-02-18 11:30) [46]а для чего нужно исключать Warnings?)) если код всё равно работает, выполняя поставленную задачу .. - просто так? для надёжности?
← →
TUser © (2006-02-18 12:20) [47]> а для чего нужно исключать Warnings?)) если код всё равно работает, выполняя поставленную задачу .. - просто так? для надёжности?
Раскапывая варнинги вполне реально найти ошибки. Например, "Variable blablabla might not been initialized" - это может быть признаком не безобидной приходи компилятора, а логической ошибки.
← →
Sergey Masloff (2006-02-18 12:21) [48]kaZaNoVa © (18.02.06 11:30) [46]
no comments
не все так просто
← →
Дмитрий Белькевич © (2006-02-18 16:51) [49]
> а для чего нужно исключать Warnings?)) если код всё равно
> работает, выполняя поставленную задачу .. - просто так?
> для надёжности?
Либо сразу разгребай _все_ замечания, либо потом сам узнаешь. Тебе юзеры расскажут ;)
> Раскапывая варнинги вполне реально найти ошибки. Например,
> "Variable blablabla might not been initialized" - это может
> быть признаком не безобидной приходи компилятора, а логической
> ошибки.
Этот warning - почти всегда ошибка. Рано или поздно вылезет, когда стек, где локальные данные хранятся будет заполнен мусором. Помню, как-то на отлов одной неинициализированной переменной почти неделя ушла - глюки лезли совершенно безсистемно.
← →
Defunct © (2006-02-18 18:09) [50]VictorT © (13.02.06 18:10)
А че смешного-то в этой функции? одна малюсенькая ошибка еще не является поводом для смеха.
вот это смешно:Procedure InitDate(a,b,c:Integer;Var a1,b1,c1:Integer);
Var ExitCod:Boolean;
Begin
Exitcod:=true;
If (b=2) then if a<28 then a:=a+1 else Begin
a:=1;b:=b+1;ExitCod:=False;End;
if exitcod then begin
if (b=1) or (b=3) or (b=5) or (b=7) or (b=8) or (b=10) or (b=12)
then if a<31 then a:=a+1 else Begin a:=1;b:=b+1;Exitcod:=False;End;
End;
if exitcod then Begin
if (b=4) or (b=6) or (b=9) or (b=11) then if a<30
then a:=a+1 else begin a:=1;b:=b+1;End;
end;
If b=13 then Begin
c:=c+1;b:=1;End;
a1:=a;b1:=b;c1:=c;
End;
← →
Джо © (2006-02-18 18:25) [51]> [50] Defunct © (18.02.06 18:09)
> вот это смешно:
Это не смешно, это страшно 8-)
← →
Defunct © (2006-02-18 18:42) [52]Джо © (18.02.06 18:25) [51]
это аналог того о чем говорил Ega23 в [1] ;>
← →
VictorT © (2006-02-18 18:58) [53]Defunct © (18.02.06 18:09) [50]
А че смешного-то в этой функции? одна малюсенькая ошибка еще не является поводом для смеха.
А какая ошибка? Вроде работала...
А смешно (лично мне), что изобретал велосипед, когда и так в Си есть готовые средства.
← →
Defunct © (2006-02-18 19:37) [54]> А какая ошибка? Вроде работала...
вот эта:
n -= m;
должно ж быть n /= 10, если я правильно понял назначение функции ;>
← →
Defunct © (2006-02-18 20:54) [55]VictorT © (18.02.06 18:58) [53]
> А смешно (лично мне), что изобретал велосипед, когда и так в Си есть готовые средства.
Ну в C то есть готовые средства, но не всегда целесообразно ими пользоваться. Для сокращения размера программы иногда логично не подключать объемную библиотеку, а описывать такие функции как IntToStr/StrToInt самостоятельно.
← →
VictorT © (2006-02-18 21:01) [56]
> должно ж быть n /= 10, если я правильно понял
> назначение функции ;>
хм... может быть. не могу счас сообразить, много коньяка.
> Ну в C то есть готовые средства, но не всегда
> целесообразно ими пользоваться. Для сокращения размера
> программы иногда логично не подключать объемную
> библиотеку, а описывать такие функции как
> IntToStr/StrToInt самостоятельно.
Ну, у меня точно не тот случай, а сделано это именно от незнания.
Кроме того, например, sprintf() не требует ничего подключать.
← →
wicked © (2006-02-18 22:09) [57]
> Ну, у меня точно не тот случай, а сделано это именно от
> незнания.
> Кроме того, например, sprintf() не требует ничего подключать.
уууу..... а некислый сишный рантайм натурально в космосе находится?.... ;)
правда, у тебя msvc - рантаймы на каждой машине с виндовсом.... а вот бедным борландитам несладко - будь добр линковаться статически или пиши инсталятор на каждую поделку.....
да и, смею добавить, функции, требующие format string, по определению не могут быстро работать, так как каждый раз при вызове они должны парсить этот самый format string.... гибкость за счет быстродействия, что, кстати, не всегда приемлемо.... хотя сам грешен - в "быстром" коде метод printf юзаю (аналог sprintf-а, но оформлен методом стрингового класса)....
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.015 c