Отговори на тема  [ 75 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5  Следваща
Тест за "добри" С програмисти. 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Чет Дек 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
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Бях чел някъде в нета, ситуации при които НЕ използването на goto води до безмислено усложняване на кода, но беше отдавна. Ако използването на goto, означава лошо написан код, то вижте само в Linux ядрото, колко пъти е изплозвано goto-то.
малко оффтопик:
Ако някой се интересува от Ц главоблъсканици може да погледне тук http://www.ioccc.org/.
И една моя любима :D .
Код:
#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
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 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
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Е Дедо, не бъди толкова лош, това все пак си е от конкурс за неразбираем код.


Вто Яну 24, 2006 4:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
какво да ти кажа...
на малките момченца, като почнат да им разтат пишките и почват да си ги мерят.
като порастнат момченцата, разбират че няма значение колко ти е голяма пишката.
но някои момченца, така и не порастват :roll:

това ми прилича точно на занимания в пионерски лагер: възхитително вълнуващи като бръмбар в буркан. и също толкова полезни...


Вто Яну 24, 2006 4:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 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-то, интересно изглежда обаче и асемблерския код 8O , а резултата....без думи. Чувал сьм и за конкурс, в който целта на кода е да се компилира смислена програма като се чете сорса от пред на зад и от зада на пред, откачена работа :)


Вто Яну 24, 2006 4:37 pm
Профил WWW
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
@Bezmozachen

Моля те постни резултата ...... втрещен съм

не можах да го компилирам с BCB и DEVC++ друго нямам


Вто Яну 24, 2006 4:45 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 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
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 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
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Дедо Боре това ли е резултата?!?!

О не...............


Последна промяна Dimiter на Вто Яну 24, 2006 4:52 pm, променена общо 1 път



Вто Яну 24, 2006 4:51 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Опа, Дедо ме е изпреварил :) . Между другото бях чел и за софтуер на който му подаваш "нормално" написан код и той ти вади главоблъсканици от сорта на горната. До колкото рабрах се позлвал за защита на алгоритама на работа от копиране.


Вто Яну 24, 2006 4:52 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Е сега вече няма да се учудя ако видя и програма за генериране на
'Утрешен вестник' :rolleyes:


Вто Яну 24, 2006 4:55 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 75 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни