|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:20 pm
Тест за "добри" С програмисти.
| Автор |
Съобщение |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
 Как познах какво ще стане, като някой каза "goto"
Моето мнение е следното:
При програмиране на абстрактна, машинно независима логика и правилно построен алгоритъм в общия случай не се налага използването на "goto"; В този случай не се гони максимално оптимизиран резултат от компилацията; Има достатъчно много други алтернативни езикови конструкции, с които може да се изпълни функционалността: Например: while () {} и do {} while (); типовите шаблони за компилиране на тези конструкции до асемблер, преведени на 'С' правят точно това: if () { goto };
Аз лично не съм се свенил никога да напиша goto, когато ми се налага например в обработчик на прекъсване да излизам през един изход по много условия (пример: ethernet драйвер, функцията за приемане на пакет); в случая единствената възможна алтернативна конструкция е if .... else if ... else if ..., която просто не може да се компилира до толкоз ефективен код, колкото може да се получи с goto.
Прегледност на кода е субективно понятие  за този, който някога е програмирал асемблер, за която и да е платформа, използването на goto не представлява проблем в четимостта на програмата 
|
| Вто Яну 24, 2006 8:54 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Нали се сещате че един програмист който не е виждал дизасемблерски листинг, няма как да хареса GOTO. Голяма част от съвремнните ПС програмисти нагаждат ПС-то към проекта, а не обратно. Т.е. ако проекта е тежък - просто се взима по мощно ПС. Кой го е грижа за оптимизация на кода.
То вече за Embedded се имат и системи с по 4М рам и 200Мхз системен такт, за чии му е да оптимизира.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Яну 24, 2006 11:06 am |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Бях чел някъде в нета, ситуации при които НЕ използването на goto води до безмислено усложняване на кода, но беше отдавна. Ако използването на goto, означава лошо написан код, то вижте само в Linux ядрото, колко пъти е изплозвано goto-то.
малко оффтопик:
Ако някой се интересува от Ц главоблъсканици може да погледне тук http://www.ioccc.org/.
И една моя любима  .
 |  |  |  | Код: #include <stdio.h>
main(t,_,a)char *a; {return!0<t?t<3?main(-79,-13,a+main(-87,1-_, main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a )&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_, t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\ ,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\ +k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\ l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\ n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \ ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\ #'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\ +1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \ i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
|  |  |  |  |
|
| Вто Яну 24, 2006 3:24 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Бах мама му. Ще ми колабира мозъка, просто е изключено да хвана да дешифрирам и един ред от подобна чудесия. Ако приемем, че това е валиден ANSI C код, ако го пусна да се компилира 50% от компилаторите ще откажат категорично, 40% ще опитат и ще забият, а някой и друг сигурно ще се мъчи няколко седмици да го разплете.
И какъв е резултата в крайна сметка? Аз мисля че е 42.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Яну 24, 2006 3:50 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Цецо gcc под Linux го компилира без проблеми, не знам да ли да пост-на резултата, просто е по-добре всеки да го види сам (изненада). Още си спомням първия път като го стартирах как гледах монитора.
Между другото гледах в нета на едно, две места анализ на точно този код.
|
| Вто Яну 24, 2006 3:54 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
даааа - много готин пример как трябва да се пише на С
даже не искам да се замисля защо работи
ама ако някой ми напише такъв код е уволнен директно... дори и да е покана за бира
|
| Вто Яну 24, 2006 4:04 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Е Дедо, не бъди толкова лош, това все пак си е от конкурс за неразбираем код.
|
| Вто Яну 24, 2006 4:09 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
какво да ти кажа...
на малките момченца, като почнат да им разтат пишките и почват да си ги мерят.
като порастнат момченцата, разбират че няма значение колко ти е голяма пишката.
но някои момченца, така и не порастват
това ми прилича точно на занимания в пионерски лагер: възхитително вълнуващи като бръмбар в буркан. и също толкова полезни...
|
| Вто Яну 24, 2006 4:18 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
 |  |  |  | Код: ... .LC1: .ascii "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+," .ascii "/n{n+\t\t\t ,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'" .ascii "K:'+}e#';dq#'l q#'+d'K#!/\t\t\t +k#;q#'r}eKK#}w'r}eKK{" .ascii "nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d" .string "}rw' i;# ){n\t\t\t\t l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\t\t\t\t\t\t n'wk nw' iwk {KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \t\t\t\t\t\t\t ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\t\t\t\t\t \t\t #'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/" ... .LC3: .string "!ek;dc \t\t\t\t\t\t\t\t\t\t\t i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry" .text ...
|  |  |  |  |
Никакви проблеми с gcc-то, интересно изглежда обаче и асемблерския код  , а резултата....без думи. Чувал сьм и за конкурс, в който целта на кода е да се компилира смислена програма като се чете сорса от пред на зад и от зада на пред, откачена работа 
|
| Вто Яну 24, 2006 4:37 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
@Bezmozachen
Моля те постни резултата ...... втрещен съм
не можах да го компилирам с BCB и DEVC++ друго нямам
|
| Вто Яну 24, 2006 4:45 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
db@srv1~|gcc -o test test.c
test.c:7:69: warning: backslash and newline separated by space
test.c:8:69: warning: backslash and newline separated by space
test.c:9:69: warning: backslash and newline separated by space
test.c:10:55: warning: backslash and newline separated by space
test.c:11:68: warning: backslash and newline separated by space
test.c:12:44: warning: backslash and newline separated by space
test.c:14:68: warning: backslash and newline separated by space
test.c:14:68: warning: backslash-newline at end of file
test.c:15:67: warning: backslash and newline separated by space
db@srv1~|./test
On the first day of Christmas my true love gave to me
a partridge in a pear tree.
On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.
On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.
On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the eighth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
db@srv1~|
Последна промяна ДедоБоре на Вто Яну 24, 2006 4:50 pm, променена общо 1 път
|
| Вто Яну 24, 2006 4:49 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Резултат:
 |  |  |  | Код: On the first day of Christmas my true love gave to me a partridge in a pear tree.
On the second day of Christmas my true love gave to me two turtle doves and a partridge in a pear tree.
On the third day of Christmas my true love gave to me three french hens, two turtle doves and a partridge in a pear tree.
On the fourth day of Christmas my true love gave to me four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the fifth day of Christmas my true love gave to me five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the sixth day of Christmas my true love gave to me six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the seventh day of Christmas my true love gave to me seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the eighth day of Christmas my true love gave to me eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the ninth day of Christmas my true love gave to me nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the tenth day of Christmas my true love gave to me ten lords a-leaping, nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the eleventh day of Christmas my true love gave to me eleven pipers piping, ten lords a-leaping, nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
On the twelfth day of Christmas my true love gave to me twelve drummers drumming, eleven pipers piping, ten lords a-leaping, nine ladies dancing, eight maids a-milking, seven swans a-swimming, six geese a-laying, five gold rings; four calling birds, three french hens, two turtle doves and a partridge in a pear tree.
|  |  |  |  |
|
| Вто Яну 24, 2006 4:49 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
Дедо Боре това ли е резултата?!?!
О не...............
Последна промяна Dimiter на Вто Яну 24, 2006 4:52 pm, променена общо 1 път
|
| Вто Яну 24, 2006 4:51 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Опа, Дедо ме е изпреварил  . Между другото бях чел и за софтуер на който му подаваш "нормално" написан код и той ти вади главоблъсканици от сорта на горната. До колкото рабрах се позлвал за защита на алгоритама на работа от копиране.
|
| Вто Яну 24, 2006 4:52 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
Е сега вече няма да се учудя ако видя и програма за генериране на
'Утрешен вестник' 
|
| Вто Яну 24, 2006 4:55 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|