- Honor 200 - kétszázért pont jó lenne
- Huawei Watch GT 5 Pro - egészség + stílus
- Samsung Galaxy S25 - végre van kicsi!
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Google Pixel topik
- Samsung Galaxy A55 - új év, régi stratégia
- Yettel topik
- Honor 200 Pro - mobilportré
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
Új hozzászólás Aktív témák
-
pmonitor
aktív tag
válasz
alapz@j #6339 üzenetére
Nem azért írja ki a Hellot!-t, mert ugyanolyan a kezdeti stack frame-je! Ha t2()-t így módosítod:
void t2(void) {
int err = 0;
char chrarr[256] = "Erik.";
char msg[32];
puts(chrarr);
puts(msg);
}akkor is a Hello!-t írja ki. Egyszerűen memóriaszemét lesz a t1() után. Ezért kell mindig feltölteni a tömböt allokálás után.
-
pmonitor
aktív tag
válasz
sztanozs #6313 üzenetére
Tényleg, ezt nem is néztem, látod(csak kopiztam). A Wikipedia az első link, ami működik. Pont ezért is illene átnézni, és legalább a felülvizsgálatot elkövetni velük, mert a döglött linkek amúgy sem szépek egy oldalon.
De egyébként nem erre a problémára gondoltam, hanem hogy sztem. nem kéne 1 olyan oldalt reklámozni, mint a prog.hu. Ezzel kapcsolatban várom a véleményeket pro és kontra, hogy hánynak tetszik a prog.hu, és mennyinek nem. És főleg az indoko érdekelnének. Nekem pl. az említett dolgon kívül nagy problémám az oldallal, hogy csak úgy frissítgeti magát, önkéntesen.
-
pmonitor
aktív tag
válasz
Silεncε #6311 üzenetére
De tudomásom szerint, aki írta az összefoglalót, ő a fórumozók kérésére tette ezt. elég csak megnézni az első pár hozzászólást. Tökéletesen látszik már a #3 kicsitomi88 hsz-ében a "Majd a modiknak szólunk ha...". A modik bármit meg tudnak csinálni, de az ilyeneket sztem nem maguktól találják ki, hanem "közkívánatra". De azt is sztem. konzultáció előzte meg ebben a topic-ban. Nem tudom, hogy most is a többség ennyire reklámozná-e a prog.hu-t.
Őszintén szólva pontosan nem tudom, hogy mikor off egy hsz., de az egyik az, hogy nem a verdákról írtam, hanem a C topic-ról. A másik meg az, hogy semmi aktív magasabb rendű téma/kérdés nem volt(tehát semmilyen konzultációt nem szakítottam félbe vele.Úgyhogy attól függetlenül, hogy néha tényleg nem tudom, hogy mi off, és mi nem az, ebben az esetben mind1. De te is offoltál pl. a #6306-ban. Egyébként meg lehet ignorálni az adott kérdést/témafelvetést, ha nem tetszik.
-
pmonitor
aktív tag
Miért van a Téma összefoglalóban a Prog.hu-s cikkek és a Prog.hu-s tudástár témák? Igaz, hogy én elfogult vagyok ezzel kapcsolatban, mert sztem csak az 1-2 nem beépített válaszadónak köszönhetünk hasznos megoldásokat(de kevés az ilyen). De ezen a fórumon is volt olyan, aki azt írta, hogy kb. azt sem tudja, hogy létezik a prog.hu. Na most ha rajtam kívül is van, aki ignorálja a prog.hu-t, akkor nem álszentség ez?
-
pmonitor
aktív tag
válasz
Ereshkigal #6304 üzenetére
Szép lassan el. Csak még egy idézet a B. W. Kernighan - D. M. Ritchie: A C programozási nyelv című könyvből:
Bár nem kívánunk az ügyben dogmatikusak lenni, kimondjuk : minél kevesebbet használjuk a goto-t, annál jobb.
Mi lenne, ha dogmatikusak akarnának lenni?
Aztán én ezennel kijelentem: akármi is történik, a goto-val kapcsolatban ebben a topicban többet nem nyilvánulok meg.
-
pmonitor
aktív tag
válasz
dabadab #6301 üzenetére
De pl. az egymásba ágyazott ciklusokból való kiugrást nem tudták goto nélkül megoldani. Pl. ez is változott, ha a nyelv jelentős mértékben nem is.
Meg nem véletlenül kezdi úgy a bevezetését, hogy a "sokat szidott goto utasítást". Már akkor sokat szidott volt. Még C-ben is!
-
pmonitor
aktív tag
válasz
dabadab #6299 üzenetére
Mi nem érthető azon, hogy "Elméletileg a goto-ra soha sincs szükség, és gyakorlatilag majdnem mindig egyszerűen programozhatunk nélküle is."
És mikor írta ezt a könyvet?
Egyébként a ciklust is meg lehet írni goto nélkül(bár az azért 1 kicsit bonyolultabb, de megoldható). Pl. ezt sem vették figyelembe. Azóta már sok minden változott, még ha alap könyvről is van szó. -
pmonitor
aktív tag
válasz
buherton #6296 üzenetére
B. W. Kernighan - D. M. Ritchie: A C programozási nyelv című C alapkönyvben írják:
A C-ben is használhatjuk a sokat szidott goto utasítást, ugrathatunk címkékre. Elméletileg a goto-ra soha sincs szükség, és gyakorlatilag majdnem mindig egyszerűen programozhatunk nélküle is. Ebben a könyvben nem használtunk goto-t. Mindazonáltal bemutatunk néhány olyan esetet, ahol a goto-knak meg lehet a maguk helye. A leggyakoribb eset, amikor a feldolgozást valamilyen mélyen skatulyázott szerkezet belsejében akarjuk abbahagyni oly módon, hogy egyszerre két, egymásba ágyazott ciklusból lépünk ki.
-
pmonitor
aktív tag
válasz
buherton #6293 üzenetére
Ki mondta, hogy tömegesen kell a goto-t használni?
Te is tömegesen használtad a kódodban. De pl. amit jattila48 linkelt, ott is tömegével használják. Goto hegyek, hová legyek?
Azok a nevek C-ben dolgoztak? ... csak annyi maradt meg hogy BASIC, meg Pascal?!
Személyesen László Józsefet idéztem, aki ezt írta:
A goto utasítást a Pascal-ban nem használjuk, mert ugye programozók vagyunk.Egyenesen azt mondta, hogy aki Gotot használ, az nem programozó(mondjuk nekem mondhatja, mert én tényleg nem vagyok az, tehát én használhatnék goto-t
). Igaz, hogy Pascal-ra mondta, de gyakorlatilag a goto minden nyelvben ugyanazt csinálja(már amelyikben létezik, ugye).
-
pmonitor
aktív tag
válasz
buherton #6290 üzenetére
Teljesen más a programozási filozófiánk.
A goto esetleg hatékony, de semmiképpen nem egyszerűbb. Elég megérteni, hogy mikor mit csinál. Azért legyünk őszinték: sem a tömeges goto, sem az egymásba ágyazott if nem szép. De valahogy meg kell oldani egy adott feladatot.Komoly neveket említettél, de sztem. én is(csak én nem neveztem meg személyeket, csak azt amit alkottak).
Hiába írod le még egyszer az oop nyelvekre vonatkozó gondolataidat. Ettől függetlenül léteznek olyan problémák, amiket ott is csak egymásba ágyazott if-ekkel lehet megoldani. Attól függetlenül, hogy vannak olyan eszközei, amiket leírtál(azokkal sem lehet mindent megoldani). Erre írtam példának a Java-t, amiben nincs is goto, tehát ott eleve kizárt még a lehetősége is a használatának. Pl. C#-ban sztem. van goto, de sosem néztem meg, mert minek? Én semmiképp nem használom, az biztos.
-
pmonitor
aktív tag
válasz
buherton #6279 üzenetére
Ha már ilyen provokáló választ írtál, akkor reagálok. Kérdésre kérdéssel válaszolok:
Szted. a Java megalkotói nem tudnak programozni? Mert a nyelvben nem létezik a goto utasítás. Ciklusokra van egy kibővített tulajdonsággal rendelkező break, viszont if-es feltételes szerkezetre NINCS. És mégis meg tudnak Javaban is oldani mindent.Sztem. azért ha olyan nyelv is életben tud maradni, amiben nincs goto, akkor érdemes elgondolkodni rajt, hogy tényleg szükség van-e goto-ra.
-
pmonitor
aktív tag
válasz
sztanozs #6274 üzenetére
Lehet, hogy nevemfel csinálta jól. A #6199-#6200-as hsz-ében leírta a véleményét, aztán befejezte. De ha én is ezt csináltam volna, akkor meg nem jutottunk volna el az előző kódokhoz.
Na mind1. Az biztos, hogy én a goto ellenesek táborába tartozom. És ha valaki nem ír olyant, amivel válaszkényszert generál részemre, akkor én is megpróbálom nevemfel viselkedését követni.
-
pmonitor
aktív tag
válasz
sztanozs #6270 üzenetére
Kijelentettem. Nem vitatkozok. Főleg nem győzködök. Mint láthatod, megírtam a kódot. Nekem hasznos időtöltés volt, mert megpróbáltam megérteni az olyanokat, akik annyira oda vannak a goto-ért. Nem árt, ha az ember tanul más szemléletmódot is, még akkor is, ha nem szimpi. Már nem tudom ki írta, meg betű szerint nem is tudom idézni, de megpróbálom: "Programozni annyi, mint megérteni valamit". Teljesen igaza van.
-
pmonitor
aktív tag
válasz
buherton #6263 üzenetére
Mondjuk sztem. ez az if mélység még nem veszélyes(értelmezés szempontjából).
De itt is működik új változó bevezetésével az, hogy ha még tovább kellene mélyíteni, akkor a változó(mint kapcsoló) "beállításával" lehet követő if-ben rendezni a további feltételeket.
Nekem is azért nagyon oda kellett figyelnem, hogy ezt a goto-val tele kódot megértsem egyáltalán, hogy mi miért is van. És még így sem biztos, hogy sikerült. Ezért írtam, hogy nem biztos, hogy ekvivalens. Úgyhogy nekem meg a goto-kkal teletűzdelt kód antipattern. -
pmonitor
aktív tag
válasz
buherton #6253 üzenetére
Ezt kalkuláltam ki:
int __init my_init_function(void) {
int err = register_this(ptr1, "skull");
if (!err)
{
err = register_that(ptr2, "skull");
if(!err)
{
err = register_those(ptr3, "skull");
if (err)
{
unregister_that(ptr2, "skull");
unregister_this(ptr1, "skull");
}
} else {
unregister_this(ptr1, "skull");
}
}
return err;
}Lehet, hogy még nem teljesen ekvivalens, de a logika látszik benne.
-
pmonitor
aktív tag
válasz
dabadab #6249 üzenetére
Ha a 300-301. sorban látod, hogy goto out; , akkor honnan tudod, hogy az hova ugrik? "Csak" 170 sort kell lejjeb "tekerned", hogy megtudd, hogy az out mit csinál. Addig csak sejtheted(a neve alapján).
@jattila48:
Nem csúsztattam. Az egyértelműen látszott, hogy dabadab mellett vagy. De az is igaz, hogy a #6216-ban ezt írtad:
A #6179 példa valóban jó, de dabadab kritikájában is van azért igazság, annál is inkább, hogy ennél az egyszerű szerkezetű példánál sokszor bonyolultabb a vezérlésszerkezet, amit nem lehet ilyen szépen struktúrálttá alakítani.Ezért nem csúsztatás, amit írtam. Ez nem az az eset, hogy túl finoman fogalmaztál, hanem egyértelműen elismerted, hogy ez egy szép, struktúrálttá alakított kód. Csak most változtattad meg a véleményed.
Egyébként nem csak téged nézett le, hanem a felsorolásból kihagytam Livius-t és nevemfel-t. Legalábbis itt a topic-on belül. Nézd meg légyszíves nevemfel #6199-es hsz-ét.
És ki tudja, hogy hány embert nézett le az olvasók között. -
pmonitor
aktív tag
válasz
kovisoft #6247 üzenetére
Egy olyan kódot, mint ami itt a 272-473 sorok között van(vagy ennél hosszabb függvény) kódot így sem, úgy sem lát át utólag senki, akármennyire az olvashatóság jegyében íródott, nem az akadémiai szempontok szerint. Tehát így is úgy is, megizzad vele, aki ezt utólag át akarja látni. Még ha az nézi, aki csinálta, ő is beleizzad.
-
pmonitor
aktív tag
válasz
sztanozs #6245 üzenetére
Egy példát tudnál mutatni? Mert amit én a #6219-ben írtam példát, ott egyetlenegy szinttel mélyült csak, nem többel. De ha a #6233-ban lévő behúzást használnánk, sztem alig lehetne ezt is észrevenni.
Meg a tapasztalatom szerint inkább ilyen szerkezetek lesznek:
if(feltétel1 || feltétel2 || feltétel3)
{
}Tehát inkább csak az if-ben növekszik a feltételek száma, nem a feltétel mélysége. Általában VAGY, de ritkán előfordul ÉS kapcsolat is.
-
pmonitor
aktív tag
válasz
dabadab #6240 üzenetére
Az, hogy mennyire olvasható, az nagyon szubjektív dolog. A következő példát mondom rá:
#6216 hsz-ében jattila48 is elismerte, hogy a szóban forgó kód jobb, mint a tiéd. Pedig a te oldaladon állt, mert azt írta, hogy:
>A #6179 példa valóban jó, de dabadab kritikájában is van azért igazságEz egyértelműen tükrözi, amit az előbb írtam. Na ennyire szubjektív, hogy 1 kód mennyire "jó"(a te szavad járása szerint). Aki melletted van, még ő is azt mondta, hogy a szóbaforgó kód jó.
Zárójelben jegyzem meg, hogy szerintem ha csak az olvashatóságot nézzük, akkor az én 2 return-os kódom a legolvashatóbb. Mert a return egyértelműen jelzi, hogy itt nincs mese, kilépés van a függvényből.
De mint mondtam, ez nagyon szubjektív dolog.
-
pmonitor
aktív tag
-
pmonitor
aktív tag
válasz
dabadab #6236 üzenetére
A fenti példád nem mutatta meg. Csak sajnos nem én mutattam rá(elkapkodtam a dolgot), hanem a munka oroszlánrészét #6172-ben Livius végezte el(ő használta legjobban a szürkeállományát). És #6179-ben nevemfel tette fel az i-re a pontot. Azt, hogy hogy kell az ilyent megcsinálni. A kódod azt mutatta meg, hogy hogyan ne.
-
pmonitor
aktív tag
válasz
kovisoft #6232 üzenetére
Ki mit szokott meg. Nekem pl. teljesen idegen ez a behúzás:
if (!raw)
{
utasítás1;
}Tehát hogy a blokk elejét-végét jelző kapcsos zárójelet is behúzzák.
Én inkább így szoktam:if (!raw)
{
utasítás1;
}Vagy pl. Javascriptben:
if (!raw) {
utasítás1;
}Így sokkal több behúzást könnyebb megérteni számomra.
-
pmonitor
aktív tag
válasz
#90088192 #6228 üzenetére
Ebben a témakörben én egyértelműen az ELTE-vel értek egyet(pedig az egyetemekről sem jó a véleményem ÁLTALÁNOSSÁGBAN). Egyébként meg minden esetben el lehet kerülni a használatát. Ez alól nincs kivétel. Az viszont igaz, hogy néha plusz változó(kat) kell bevezetni, de még így is áttekinthetőbb, mint a goto.
-
pmonitor
aktív tag
válasz
#90088192 #6226 üzenetére
Idézet innen: > Ezekben a különböző számítógépeken futó BASIC programok szinte mindig inkompatibilisek voltak egymással: az egyik géptípusra írt programot más számítógéptípusokon nem lehetett futtatni.
Ez azért nem a magas szintű nyelvekre jellemző tulajdonság. Továbbá: > Az 1990-es évek elejére sokan leírták a Basicet, mivel a Basic alapú mikroszámítógépek kora lejárt, PC-n a C/C++ és a Pascal nyelvek vívtak ki vezető szerepet.
Igazából nem csak sokan leírták a BASIC-et, hanem a valóságban meg is szűnt. A Visual Basic már nem BASIC, csak BASIC-alapján készült. De már a Visual Basic is inkább csak a VBA-ban létezik. A Vb.Net meg egészen más dimenzió.
sztanozs elítélt, mert pascal témakörben készült irományokból idéztem. De ezek az idézetek nem csak a Pascal-ra vonatkoznak, hanem általánosan is igazak. Mint ahogyan írták, Pascalban nincs is return. Ettől függetlenül lehet a függvény törzsében is értéket adni a függvénynek a
függvénynév:=valami
formátumban(ej, de régen Pascaloztam). De látható, hogy a C-hez viszonyítva ennyivel szigorúbb nyelvben is tiltják a Goto-t(alapból nem is lehet használni benne, csak direktívával lehet bekapcsolni).De ha mindenképpen ragaszkodunk ahhoz, hogy csak szigorúan C nyelvre létrehozott irományokat fogad el valaki, akkor az olyannak meg itt van ez. Itt ezt írja:
> A strukturált programozást a goto utasítás elkerülésére, a program olvashatóbbá tételére találták ki, ezért a goto használata egyáltalán nem javasolt.Ezt direkt a C nyelvre írták(nem Pascal-ra).
A "ma" használt nyelvek között már a BASIC nem található meg. Sőt, az ismertebb nyelvek közül pl. a Java-ban nem is létezik a goto. Ebben a nyelvben pl. a #6219-es hsz-emben írt kódot nem is lehetne megírni. Java-ban a break-nek van 1 olyan "kibővített" funkciója, hogy egymásba ágyazott ciklusok esetén label használatával meg lehet adni, hogy a break melyik ciklusra vonatkozik. De ez nem egyenlő a goto-val(amivel össze-vissza LEHET ugrálni).
Szóval akárhol nézegetek utána, mindenhol a legfinomabb megfogalmazás is az, hogy nem ajánlják a használatát.
-
pmonitor
aktív tag
válasz
#90088192 #6224 üzenetére
BASIC != Visual Basic. A BASIC nem magas szintű nyelv(legalábbis ez alapján). Amit írsz, hogy pont azért olyan amilyen, hogy Egyszerű legyen használni, ez a Visual Basic-re igaz. A BASIC-et nem volt 1szerű használni. Ha azt látod, hogy
GOTO 100
, akkor honnan tudod, hogy mi van a 100-as sorban? De szükség volt a GOTO-ra a sorok számozása miatt. A Visual Basic-et valóban 1szerű használni, de ott meg szükségtelen a GOTO használata. Tényleg csak hagyománytiszteletből maradt benne.Azért a marcsának és a csajnak nem ugyanaz az eredménye. Marcsánál nincs, ami olajozza/ápolja a matériát!
-
pmonitor
aktív tag
válasz
jattila48 #6218 üzenetére
Nem sértődtem meg. Nézzünk 1 nagyobb projektet. Ezt remélem elfogadod 1 nagyobb projektnek. Itt a 300. sortól ez van(csak a szerkezetet mutatom):
if (raw)
goto out;
switch (token->type)
{
.
.
}
out:
timevar_pop (TV_LEX);Ezt miért nem lehet így:
if (!raw)
{
switch (token->type)
{
.
.
}
}
timevar_pop (TV_LEX);??
A nagy projekt is lépésekből épül fel.
-
pmonitor
aktív tag
válasz
jattila48 #6216 üzenetére
>A hozzászólásaidból az jön le, hogy kezdő vagy a programozásban (ez persze egyáltalán nem baj), és nem írtál még igazán nagyobb programot.
Nem kezdő vagyok, hanem egyszerűen nem vagyok programozó, ez miatt kezdő sem.
Az előéletem megnézheted itt, ahol azért 1-2 kérdésre válaszoltam.De ha a referenciáim érdekelnek, akkor többek között ezek, valamint ezek, továbbá ezek a publikus kódjaim, amelyek között van nagyobb is(persze relatív, hogy mi az az igazán nagyobb program?).
Neked mik a referenciáid/publikus kódjaid?
-
pmonitor
aktív tag
válasz
#90088192 #6214 üzenetére
Hogy miért találták ki? Hát pl. azért, mert a BASIC-ben pl. lehetetlen volt a programozás nélküle(ott még a sorok számozva voltak. De itt is írják:
> Léteztek olyan ősnyelvek, amelyekben nélkülözhetetlen voltHát többek között ezért. Na meg azért, mert akkor még nem bizonyították be, hogy GOTO nélkül mindent meg lehet oldani, nincs szükség rá.
Egyébként itt osztályozzák a programnyelveket, ahol látszik, hogy a C/C++ is magas szintű nyelv.
-
pmonitor
aktív tag
válasz
jattila48 #6211 üzenetére
Látom, hogy hozzászólásonként válaszolsz. #6181-ben leírtam, hogy nevemfel #6179-ben lévő megoldása a legjobb arra a feladatra(nem az enyém).
#6184-ben Stroustrup-ot idéztem, aki azt írta, hogy:
>A "soha ne tegyük ezt" alakú szabályokat haszontalannak tekintem.
A #6190-ben idéztem László Józsefet:
>A goto utasítást a Pascal-ban nem használjuk, mert ugye programozók vagyunk.
Majd a #6197-ben innen is idéztem 2 programnyelvtől független idézetet.A véleményem a #6209-ben foglaltam össze. A goto-cimke párossal összevissza lehet ugrálni, áttekinthetetlen lesz a kód tőle. Ha cimkét látsz, akkor egyrészt nem tudod, hogy fentről, vagy lentről tévedt oda a vezérlés. De azt sem tudod ránézésre, hogy amik utána vannak utasítások, azok micsodák(pl. a cimke 1 ciklus kezdetét jelzi-e, vagy egy - vagy több - if ágból ugrottak-e oda). Ugyanakkor, ha goto-t látsz, akkor sem tudod, hogy az a cimke felfelé, vagy lefelé ugrik-e. Az összevissza ugrálás lehetősége miatt mondom én azt, hogy a goto - cimke párost soha! Míg ha azt látod, hogy
while(f)
, akkor totózás nélkül, kapásból tudod, hogy mi következik(1 cimkével ellentétben).Én ugyan nem vagyok programozó, de remélem, hogy az ELTE-n(is) vaskalaposan ragaszkodnak a struktúrált programíráshoz, és tiltják a goto-t azokban a nyelvekben is, amelyekben még létezik. Mert ahogy a fenti linkemen is írják:
>a mai magasszintű nyelvekbe azonban többnyire hagyománytiszteletből került be, nincs rá szükség. (mármint a goto-ra). -
pmonitor
aktív tag
válasz
sztanozs #6208 üzenetére
A megerőszakolt while ciklus sztem. egyértelműbb(ha ennél a példánál maradunk), mint a goto. Mert a while ciklus esetén kapásból látod, hogy itt f értékétől függő ciklusról van szó. Ráadásul ugye ott még a code syntax(behúzás) is segít a megértésben. Ha egy cimkét látsz, akkor azt nem tudhatod, hogy fentebbről jövő if, vagy else, vagy alulról jövő ciklustól téved-e oda a vezérlés. Ráadásul a cimkéknél nem nagyon van syntax(behúzás), illetve ha van, az meg még rosszabbul olvasható. Ugyanakkor a for-ban lévő goto esetén sem tudod egyből megmondani, hogy az előre, vagy hátra ugrik-e. Szóval a megerőszakolt while esetén egyből látszik a szerkezet, míg goto esetén nem.
Azért a vb6/vba/vbs esetén amit linkeltél, az nem ugyanaz, mint a Try/Catch/Finally. Ezt is figyelembe kell venni. Egyébként ezek közül én csak az On Error Resume Next-et szoktam használni. De amit linkeltem, az a pascal program végén látható "A goto eredménye" című kép, az sztem abszolút nem nyelvfüggő. Másrészt meg én úgy tudom, hogy a C-t is a magas szintű nyelvek közé sorolják.
-
pmonitor
aktív tag
válasz
sztanozs #6205 üzenetére
Technikailag nem ugyanazt csinálja, mert az
// utasítások
-ban lehet olyan is, ami átugorja a for és a while ciklust is egyben, vagy még hátrébb is mehet. Ezért értek egyet azzal az állásponttal, hogy goto-t soha, még ha durvább megfogalmazás is.Nézd meg légyszíves ezen oldal végén a "goto eredménye részt". Na ezért mondom, hogy gotot soha...
-
pmonitor
aktív tag
válasz
sztanozs #6202 üzenetére
Nem az implementációról beszéltem. Nem tudsz olyan kódot írni, hogy az implementációban break(vagy continue) legyen. Ott valóban minden goto(és ha tovább megyünk a kész kódra, akkor jmp) lesz. Arról a forráskódról beszéltem, amit a user ír. A példádban erről:
for (int i=k; i>l; i+=m)
Itt a continue visszafelé lép a törzsből az "i+=m"-re. Míg a break csak előre lép, a törzs utáni helyre. break-el nem tudsz visszafelé lépni. A goto-val meg össze-vissza tudsz lépkedni(akár hátrafelé is ki tudsz lépni a ciklusból(aztán vagy újra belelépsz, vagy akkor már kihagyhatod a ciklust is). Pl.:
cimke_1:
//utasítások
for (int i=k; i>l; i+=m) {
//utsítások
goto cimke_1;
}Ilyent a break-el nem tudsz csinálni. Az, hogy az implementációban mi van, az más kérdés.
Szerk:
A break esetén megvalósul a szekvencia - iteráció elv. Szekvenciálisan mennek az utasítások, amíg egy ciklushoz nem érsz. A ciklus más dimenzió, mint a szekvencia. Viszont a break tartja a szekvenciát(hiszen előre ugrik. Tehát az iteráció előtt és mögött is megmarad a szekvencia. Persze közben lehet szelekció bárhol, de a példámat nem akartam annyira bonyolítani. -
pmonitor
aktív tag
válasz
sztanozs #6195 üzenetére
Bármennyire is adott azonban a lehetőség a Goto használatára, ne használjuk. Nincs olyan probléma, amely ne lenne megoldható nélküle is, használatával azonban áttekinthetetlenné válik a programunk, és ezzel a hibalehetőségek száma növekszik.
Továbbá:
A Goto parancs sok nyelvben létezik, használatát azonban el kell kerülni. Léteztek olyan ősnyelvek, amelyekben nélkülözhetetlen volt, a mai magasszintű nyelvekbe azonban többnyire hagyománytiszteletből került be, nincs rá szükség. Léteznek olyan nyelvek is, amelyekből hiányzik ez a parancs.
Ezért hasonlítom össze a C-t meg a Pascalt(meg minden olyan nyelvet, amiben létezik). Mindenesetre a fenti idézetek sem Stroustrup nézőpontját hangoztatják, hanem László Józsefét. Sőt, a második idézet egyértelműen kimondja, hogy léteznek olyan nyelvek is amelyekből hiányzik. Ezek szerint azokban a nyelvekben nem is lehet programozni, igaz?
-
pmonitor
aktív tag
válasz
sztanozs #6193 üzenetére
Az első mondatom meg szerintem nem értetted meg. Azt a goto-ra írtam.
Csak azért leírtam, hogy komoly könyv írója is tiltja a goto-t nem véletlenül.
Meg leírtam, hogy ezzel virtuálisan jól összeugrasztottam Stroustrup-ot és László Józsefet.Még a szakik sem értenek mondjuk egyet. De László József nem egy könyvet írt meg goto nélkül. Ez azért valamit csak jelent, nem?
-
pmonitor
aktív tag
válasz
sztanozs #6188 üzenetére
A break nem goto. Nem lehet vele visszafelé ugrani, meg if-es szerkezetekből sem tudsz kilépni vele.
Ebben a könyvben László József a következőket írja(többek között):
>A Pascal programokban betartunk még néhány hasznosnak vélt egyéb konvenciót is:
1: Angol elnevezést adunk az eljárásoknak, függvényeknek, típusoknak, változóknak, stb.,
.
3: A megjegyzéseket magyarul írjuk, lehetőleg minél tömörebben,
.
5: A goto utasítást a Pascal-ban nem használjuk, mert ugye programozók vagyunk.Na, most virtuálisan jól összeugrasztottam Stroustrup-ot és László Józsefet.
-
pmonitor
aktív tag
válasz
gregory91 #6185 üzenetére
A continue tiltásán 1 kicsit én is csodálkozom. Ami okot adhat erre, az talán az, hogy a ciklusnak alapvetően 2 lényeges pontja van: az eleje és a vége. A continue ezt rúgja fel. Gyakorlatilag így több (kis)ciklus lesz a (nagy)ciklusban, ami egyébként elkerülhető. Sztem ez lehet valamiféle ok a tiltására. De mondjuk ezt én nem venném fel a "soha" kezdetű listámra.
-
pmonitor
aktív tag
válasz
dabadab #6165 üzenetére
Stroustrup írta:
>A "soha ne tegyük ezt" alakú szabályokat haszontalannak tekintem.Ez általában igaz, viszont teljesen nem értek vele egyet. Hozzátenném, hogy azért nem ilyen sok van. 2 fő ökölszabály viszont biztos létezik a programozásban:
1.: SOHA ne használjunk gotot. A Szekvencia - Szelekció - Iterácó hármassal mindent meg lehet oldani. Nincs szükség goto-ra.
2.: Ha van egy típus, és létezik hozzá olyan függvény/metódus, hogy a konvertál(string s) az adott típusra alakítja a stringet, akkor ezt a konvertál() függvényt/metódust MINDIG használni kell, mielőtt műveletet végzünk vele. -
pmonitor
aktív tag
-
pmonitor
aktív tag
válasz
dabadab #6175 üzenetére
Így?
static int kvm_vcpu_check_block(struct kvm_vcpu* vcpu)
{
int ret = 0;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
int ex = 0;
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
ret = -EINTR;
ex = 1;
}
if (!ex && kvm_cpu_has_pending_timer(vcpu))
{
ret = -EINTR;
ex = 1;
}
if (!ex && signal_pending(current))
{
ret = -EINTR;
}
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
} -
pmonitor
aktív tag
válasz
dabadab #6171 üzenetére
De sztem ki lehet az ilyeneket szervezni az ilyent külön függvénybe, és akkor tovább egyszerűsíthető. Azért a gyakorlatban ilyen nem nagyon fordul elő. A papír(vagy a monitor
) mindent elbír.
Szerk.: ja látom Livius gyorsabb volt. Mondtam, hogy csak szervezés kérdése. Csak nem én szerveztem jól.
-
pmonitor
aktív tag
válasz
dabadab #6169 üzenetére
Ha minden igaz így hirtelen:
static int kvm_vcpu_check_block(struct kvm_vcpu *vcpu)
{
int ret = -EINTR;
int idx = srcu_read_lock(&vcpu->kvm->srcu);
if (kvm_arch_vcpu_runnable(vcpu)) {
kvm_make_request(KVM_REQ_UNHALT, vcpu);
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}
if (kvm_cpu_has_pending_timer(vcpu) || signal_pending(current)) {
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
}
ret = 0;
srcu_read_unlock(&vcpu->kvm->srcu, idx);
return ret;
} -
pmonitor
aktív tag
válasz
dabadab #6165 üzenetére
> vagy minden helyre külön odakopipészteled a felszabadítást, vagy mindenhonnan a végére gotozol.
Mindenképpen mindenhová kell kopipésztelned vagy a gotot, vagy a felszabadítást. De sztem. ha ilyenre sor kerül a gyakorlatban, ott nem jól tervezték meg a logikai hálózatot. Biztos vagyok benne, hogy a megfelelő if-ek megválasztásával ha nem is teljesen, de nagyon nagy mértékben megszüntethető a sok helyről történő kilépés a függvényből. Max. 2 helyre nyugodtan lehet kopizni a felszabadítást is. De az is lehet, hogy megfelelő szervezéssel még a 2 helyet is le lehet redukálni egyre(de erre a fejemet nem teszem).
-
pmonitor
aktív tag
válasz
sztanozs #6160 üzenetére
Nem pejoratív értelemben gondoltam, amit írtam. Csupán azt jelenti, hogy aki ezt írja magáról: "Elkezdtem csak úgy érdeklődés szinten c-t tanulni mert érdekel. Az elején vagyok nagyon"
Ha ő megérti, akkor nagyon tehetséges. Ezt értettem a "viheti valamire" alatt. Egyébként az sem baj, ha most nem érti meg, és később visszanéz(és akkor gondolkodik el rajt). Viszont az olvasók között is lehet olyan, aki már eljutott odáig, hogy magától nem jutna eszébe, de ha így látja, akkor egyrészt megérti a működését, másrészt hogy mely esetekben célszerű ezt a formát használni. Sztem. az olvasókat kevesen emlegetik(talán senki), pedig többen vannak, mint akik ide írnak. Pl. itt is szóba került, hogy a kérdező kezdő, azért nem kellene kész megoldást adni. Az ilyenre írom, hogy azért olvasók is vannak, akik már megértik a másfajta megoldást is. Nem biztos, hogy mindig csak a kérdezőt kellene nézni. De a kódot "konyhanyelven" pszeudo kóddal is le lehet írni, ha valaki nem akar teljesen kész kódot adni. -
pmonitor
aktív tag
válasz
gregory91 #6150 üzenetére
Kicsit másképp
int main()
{
char name[20];
char chars[5] = { 'a','b','c','d','e' };
int yes = 0;
printf("Enter name: ");
scanf("%s", name);
int max[2] = { (int)(sizeof(name) / sizeof(char) - 1), (int)(sizeof(chars) / sizeof(char) - 1) };
int index[2];
int n = 1, act = -1;
int ok = 1;
do
{
while (act < n)
{
++act;
index[act] = 0;
}
if (name[index[0]] == chars[index[1]])
{
ok = !ok;
break;
}
while (act > -1)
{
if (index[act] < max[act])
{
++index[act];
break;
}
else --act;
}
} while (act > -1);
if (ok) printf("Name: %s\n", name);
else printf("Not a valid name!\n");
return 0;
} -
pmonitor
aktív tag
Én csak tanulmányozásra írtam a kódot, hogy az strstr() miért is nem működik karakterekre. Mert a karakter nem kezelhető strstr()-el. Viszont a ciklust nem tudod elkerülni, akár az ststr()-t, akár az strchr()-t használod. Egyébként én is elkövettem 1 hibát. A break-re nincs szükség, mert az elején a feltételben vizsgálom.
-
pmonitor
aktív tag
int main()
{
const char name[20];
const char restrictions[7] = "a\0b\0c\0";
printf("Enter name: ");
scanf("%s", name);
int i, ok = 1;
for (i = 0; restrictions[i] && ok; i += 2)
{
if (strstr(name, &restrictions[i]) != NULL)
{
ok = !ok;
break;
}
}
if (ok) printf("Name: %s\n", name);
else printf("Not a valid name!\n");
return 0;
}
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Revolut
- Vezetékes FEJhallgatók
- Honor 200 - kétszázért pont jó lenne
- Hálózati / IP kamera
- Víz- gáz- és fűtésszerelés
- Kompakt vízhűtés
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Külföldi rendelések: boltok, fizetés, postázás
- Huawei Watch GT 5 Pro - egészség + stílus
- Gyúrósok ide!
- További aktív témák...
- Eladó konfig! Ryzen 7 7800X3D 2TB SSD 64GB DDR5 RX9070XT 16GB!
- Új, makulátlan állapotú Samsung Galaxy Buds FE, fehér, fél év garancia
- Új, makulátlan állapotú Samsung Galaxy Watch7 44mm ezüst, 2 év garancia
- Új, makulátlan állapotú Samsung Z Fold 6 256GB Tengerészkék, független, 2 év garancia
- Használt TP-Link Deco M4 - AC1200 Router (Mesh-ként is használható)
- Acer Nitro 5 AN515-54-77VS
- BESZÁMÍTÁS! ASUS ROG CROSSHAIR VI EXTREME alaplap garanciával hibátlan működéssel
- iKing.Hu - Motorola Edge 50 Ultra - Nordic Wood - Használt, karcmentes
- AKCIÓ! PC Specialist Recoil VIII 17 notebook - i9 14900HX 16GB RAM 2TB SSD RTX 4060 8GB WIN11
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5800X 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest