| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Използване на goto и labels в C http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8128 |
Страница 1 от 4 |
| Автор: | mountaineer [ Съб Сеп 18, 2010 2:19 pm ] |
| Заглавие: | Използване на goto и labels в C |
Според вас, струва ли се понякога да се използва goto или трябва да се избягва на всяка цена? В повечето книги споменават, че го има, но не бива да се ползва. Наскоро взех да чета това-онова за Линукс на по-ниско ниво и се оказва, че в ядрото на доста места има вмъкнати labels и goto. Linus Torvalds твъри, че няма нищо лошо в тази практика и всичко зависи от програмиста. Предимството е, че с goto по-бързо се излиза от вложени цикли и от case-switch. Дали е просто въпрос на дисциплинирано ползване? Те от джабата и C# са махнали указателите уж за по-сигурно, ама в крайна сметка ако наистина има проблеми те са в програмистите, не в указателите... |
|
| Автор: | head_up [ Съб Сеп 18, 2010 3:34 pm ] |
| Заглавие: | |
николайчо, май няма нищо лошо ако сам си четеш кода. недай боже някой друг да го хване ще му се иска да те |
|
| Автор: | ike [ Съб Сеп 18, 2010 4:17 pm ] |
| Заглавие: | |
Хайде да почнем инициатива да се махне goto инструкцията във всички процесори. |
|
| Автор: | head_up [ Съб Сеп 18, 2010 4:45 pm ] | |||||||||
| Заглавие: | ||||||||||
предлагам да махнем изобщо процесорите - земеделие и животновъдство му е майката, както казваше дядо ми - компютър домат не ражда за салатата, ни яйца снася, пък аман от оранжерийна пластмаса. ама да не спамим темата - човека питаше хубаво ли да лепи такива неща в Ц-то |
||||||||||
| Автор: | woody [ Съб Сеп 18, 2010 6:37 pm ] | |||||||||
| Заглавие: | Re: Използване на goto и labels в C | |||||||||
Където, когато и колкото трябва. Като всичко друго. |
||||||||||
| Автор: | ike [ Съб Сеп 18, 2010 8:19 pm ] | |||||||||
| Заглавие: | ||||||||||
Мнението ми е съвсем по темата. Щом инстрокцията я слагат в процесорите - значи си трябва. Сега дали ще я ползваш да се застреляш в крака, това зависи само от програмиста. Ама ако ще се застреля с goto, то и да му го вземеш все ще намери от някаде един pointer и с него ще се гръмне в главата. |
||||||||||
| Автор: | Zeus [ Съб Сеп 18, 2010 10:16 pm ] |
| Заглавие: | |
То това goto май го заклеймиха едно време заради Бейсика. То вярно, че там се ползваше през 2-3 реда, ама езика си беше дървен. В С-то спокойно може да си мине и без него, поне до сега не ми се е налагало да го ползвам. А за човек(визирам мен), започнал с Бейсик и после минал на С - това си е постижение. Може би прехода Бейсик-Паскал-С е оказал ползотворно въздействие |
|
| Автор: | head_up [ Нед Сеп 19, 2010 12:19 am ] | |||||||||
| Заглавие: | ||||||||||
+1 В Ц-то всякак може да го въртиш, ще стане без goto, ама човека казва, че е по-бързичко в някой ситуации. от друга страна - ако искаш бързо определено няма да пишеш на Ц, или поне не през ГЦЦ-то. в крайна сметка ако трябва скорост - дерзай на asm, пък ако проца смогва (а на последък повечето смогват за малко пари) - не си струва да си троши главата в стената. |
||||||||||
| Автор: | Predator_MF [ Нед Сеп 19, 2010 2:44 am ] |
| Заглавие: | |
Виждал съм goto в много сериозни кодове, последно помня и в ffdshow сорса, даже и в quake...аз лично не ползвам, но доколкото знам не пречи |
|
| Автор: | ¶ [ Нед Сеп 19, 2010 2:55 am ] |
| Заглавие: | |
Щом са го заложили в езика, значи можеш при нужда да го използваш. Това е все едно да наплюем някоя дума от българския език и да започнем да твърдим, че не е хубаво да се използва и да я изключим от речника. Дискусията за goto много напомня на дискусията кое е първично, кокошката или яйцето, с мъдрия отговор на Пурко ( Господин за един ден ), че кокошка може да прелети отвсякъде, но яйцето не. Но всяко нещо си е с мярка, не можеш да го използваш за щяло и нещяло, защото кода става нечетим и трудно се поддържа. goto се използва предимно на ниво системно програмиране, примерно драйвери и операционна система, т.е. там където се гони критично бързодействие. Примерно няколко вложени switch оператора, от всеки case се излиза в по-горния switch, всичките тези излишни инструкции могат да се избегнат с едно goto към първия оператор след най-външния switch. Сега да си представим, че всичките switch-ове се завъртат в един стохиляден цикъл, това са няколко стотин хиляди инструкции по-малко ако се използва goto. Всеки би усетил разликата в бързодействието на драйвер написан с goto и такъв без goto. Ясно е, че такива кодове са трудни за поддръжка, но който го е страх от мечки да не ходи в гората. |
|
| Автор: | Цецо [ Пон Сеп 20, 2010 9:05 am ] |
| Заглавие: | |
goto обикновенно се използва за доизкърпване. Като имаш написан много сложен код с купища вложени цикли и условности и ти се наложи да сложиш някакво разклонение. Тогава goto те спасява. Щото понякога е рисковано да седнеш да пренаписваш всичко изначало та да промениш дървото. Току виж си пропуснал нещо, не го доистестваш и после съжаляваш. А така ръгаше едно goto и си вкарваш новия клон в дървото без да го сечеш и садиш отново. Но като пишеш първичния код - спокойно можеш и без него. Затуй в Лайнукс ядрото предполагам е пълно с него. Щото и то горкото е кръпка до кръпка. При това го кърпи кой отде го хване, после се почват едни кръпки на кръпките и накрая като го погледнеш отстрани и ти се вие свят. Орташка му работа |
|
| Автор: | TheWizard [ Пон Сеп 20, 2010 9:50 am ] |
| Заглавие: | |
по-бързо било с него, спасявал каруцата, достъпен и ясен бил..... Анатема, няма да го ползвате!!!... програмисти... |
|
| Автор: | miro_atc [ Пон Сеп 20, 2010 11:13 am ] | |||||||||
| Заглавие: | ||||||||||
Бе че се ползва goto, ползва се... ей тука пуснах едно търсене в 2.6 и цели 6757 ц-файла съдържащи перверзната думичка... Така погледнато изглежда страшно, но то просто си е огромно. Иначе в сорсовете дето аз съм се ровил няма goto. Не бих казал и че е "кръпка до кръпка". Напротив, повечето сорсове са доста изчистени. Функциите масово са с размер под 20-30 реда, простички и разбираеми. Не казвам че всичко като краен резултат е цвете, но съм имал шанса да видя много неща от бозата на М$ в сорс. Разликата е просто оооогромна!! Линукс като сорс е 100 пъти по-четим и 100 пъти по-изчистен. И не мисля че преувеличавам изобщо. Самият факт, че всеки по-добър програмист *може* и *се* ориентира в компилации от 30 до 100 000 файла говори само по себе си. В М$ е *невъзможно* да се ориентираш само от сорса. Най-малкият проблем е, че липсват сорсовете на куп. Ние навремето успяхме да изтръгнем къде официално къде не едва 20-30 файла, но не това е проблема. Значи и всичките да ги има човек е все тая, просто при М$ сорсовете са безполезни, ако нямаш документацията и съпорта. За щастие те имат и двете, като особено документацията им е направо на светлинни години спрямо линукса... |
||||||||||
| Автор: | radolin [ Пон Сеп 20, 2010 4:14 pm ] |
| Заглавие: | |
В Линукс goto много често се ползва за освобождаване на заделени ресусри при неуспех в инициализацията. Обикновено при зареждането на драйвер трябва да се заделят N ресурса и съответно при неуспех в някоя от стъпките да се освободят само тези, които са вече заделени. Примерно: в началото на функцията: Задели ресурс 1, при неуспех goto L1; Задели ресурс 2, при неуспех goto L2; Задели ресурс 3, при неуспех goto L3; ... Задели ресурс N, при неуспех goto LN; тука e основния код на функцията; и към края на функцията: LN: освободи ресурс N; ... L3: освободи ресурс 3; L2: освободи ресурс 2; L1: освободи ресурс 1; Така много елегантно при проблем в инициализацията се освобождават само тези ресурси, които вече са били заделени и то в обратен ред. При успех пък и достигане на края на функцията се освобождават всички, пак в подходящия ред. Това вместо с goto може да се направи естествено и с други средства, но или ще има повторение на код, или сложни вложени условни оператори. Та ето един пример в който употребата на goto прави кода по-лесен за четене и поддръжка. |
|
| Автор: | emilvtc [ Пон Сеп 20, 2010 5:26 pm ] |
| Заглавие: | |
Още един глас за използване на ГОТО-то. Разбира се, че правилното му използване води до по-ефективен код като скорост. Разбира се и че правилното му използване води и до по-ефективен код като размер. Та на всичко отгоре може да доведе и до по-четим код ... Зависи от случая ... При писането на код трябва да се стремим да правим "оптимизация" още на ниво сорс. Goto може много да ни помогне в това отношение. Тъпо е според мен да се разчита само на оптимизацията на компилатора при компилиране. Пирев хубаво го каза това за "мечките и гората" Не мога да схвана каква е тази самоцел - дайте да се гърчим и да мислим идиотски констрикции от оператири само за да не използваме Goto ? Това ми звучи малко смахнато, не мислите ли ? |
|
| Страница 1 от 4 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|