( uid_2716 | 2011. 07. 01., p – 19:44 )

Na, megint itt a vallásháború, de nem bánom :)

Én a goto-t C-ben nem kivételkezelésre használom. (Ha jól sejtem, te itt a vízesésszerű, vagy másként, "beskatulyázott", veremszerű hibakezelésre gondolsz, amivel mintegy destruktorokat lehet C-ben csinálni.) Az én stílusom és az általam jelenleg követendő coding style itt szöges ellentétben van -- személyesen az (akár mélyen) beágyazott if-ekben hiszek (és a 2-es mélységű, space-ekből álló behúzásokban, valamint a kötelezően használandó kapcsos zárójelekben).

Mindegyik stílus mellett több érv szól (és persze mindegyikkel vissza is lehet élni). A goto-nál pluszként lehet említeni, hogy (1) az indentáció gyakorlatikag képtelen elszállni, (2) a kilépési fázisoknak neve van (= értelmes label-ek).

A beágyazott, fenti stílusú if-ek mellett szól, hogy (1) a kapcsos zárójelek rengeteg editor-ban lehetővé teszik a közvetlen ugrást a blokk szélei között -- a folding editor-ok be is tudják csukni az egész blokkot, (2) az igazán fontos pont azonban az, hogy a block scope változók láthatóságának végét is explicite tudom szabályozni (ami ugye a static tárolási osztálytól eltekintve egyben az élettartam vége is). A C99 ill. a C++98/C++03 lehetővé teszi, hogy a változót / objektumot olyan későn vezessed be, amilyen későn csak akarod; a láthatóság/élettartam végét azonban ott is csak úgy tudod kijelölni, hogy explicit blokkot (kapcsoszárójeleket) használsz. Ebben az esetben pedig már adott az indentáció, és akkor az if is, a goto pedig nem kell.

A fentiben természetesen az az indíték, hogy a nem file scope változók láthatóságát a lehető legszigorúbban korlátozni kell, a lehető legszűkebb forráskódszakaszra. Az én számomra kritikus fontosságú, hogy egy változó használatának végét is explicite jelöljem. (Ami a jelenleg követendő coding style-omra egyáltalán nem igaz, sajnos.)

Részletesebben egyszer kifejtettem itt:

http://groups.google.com/group/comp.lang.c/msg/4de897c4ba902811?dmode=s…
http://groups.google.com/group/comp.lang.c/msg/637e60376869619e?dmode=s…

A goto (nagyon ritka) felhasználási területe számomra inkább az, amikor sokat lehet vele spórolni, az érthetőség rontása nélkül:

http://groups.google.com/group/comp.unix.programmer/msg/50ecb837eb24015…