[C] jak převést číslo uložené v poli na integer

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod pucmeloudek 17. 10. 2011 21:52

Jinak proč by se nemohlo += používat v for ?

obecne samozrejme muze. v kodu od Fullera ale zpusobuje nesmyslny vysledek...

Jinac to, ze i++ v 3. casti foru je pomalejsi nez ++i je samozrejme donebe volajici pitomost, vysledek toho tretiho vyrazu se nijak nezpracovava, takze je jedno, jestli je to 9 nebo 10. To by musel bejt HODNE blaznivej prekladac, kterej by to prelozil jinak. ostatne obecne neni duvod ani tento zapis prekladat jinak:
Kód: Vybrat vše
for (int i = 0; i < delka; cislo =cislo * 10 + ((int)pole[i]-(int)'0'), i++)
        ;

To, ze nektere prekladaze zejmena v debug verzi trochu jinak preskladaj skoky a pouziti registru je vec jina; pokud clovek ale ty cykly takrikajic rozvine a diva se jen na vykonne instrukce, dostane opet nemlich to samy.
pucmeloudek
Junior

Odeslat příspěvekod Fuller009 18. 10. 2011 10:36

pucmeloudek píše:Co ale neni spravne, je += v tele toho foru.

Ano ano... v rychlém přepisování jsem, zapoměl toto plus umazat. nemá tam být a je to hrubá chyba... Hrozně se stydim :-[ :'(

k Rozdílu ++i a i++. Jejch použití je o zvyku, jednoduše jsem zvyklý to používat v tomto případě takto a zvyk je železná košile. Téměř jakýkoliv překladač to přeloží na stejný kód, tudíž v rychlosti rozdíl nebude... byl by jen v případě hooodně tupého překladače.
Fuller009
Junior

Odeslat příspěvekod soban 18. 10. 2011 11:12

Tak to tam oprav s nějakou poznámkou že jsi tam takovou chybičku měl. (Třeba ten řádek zakomentuj a přepiš znovu správně)

Jinak k ++i to vidím prvně (možná někdy dávno se to v nějaké učebnici C našlo) ovšem co jsem viděl psané tak vždy i++ .

Fakt to vidím na - "Musím se odlišovat, však to překladač přebere......"

A to int v for taky není moc košér... prostě mě se tam nelíbí...."for ( int i = 0; i < delka; ++i)"
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod cejdap 18. 10. 2011 11:25

K ++i a i++ je to i intu asi jedno. Prekladac to asi prelozi stejne. Otazka je jestli se da na to spolehat. U nas na skole je celkem bezne psat ++i, protoze kdyz clovek bude iterovat neco jineho nez je int treba iterator, tak pak je lepsi psat ++i. No a na to si clovek tak nejak navykne, ze to tak pise i u intu. Takze to neni tak, ze by clovek chtel vynikat. Spis si myslim, ze tomu trochu lip rozumi, nez ten kdo vsude pise tupe i++,proteze se jazyk jmenuje c++ a ne ++c :-)
cejdap
Junior
Uživatelský avatar

Odeslat příspěvekod pucmeloudek 18. 10. 2011 12:49

K tomy intu - naopak, takle je to pekny. Krasne omezis platnost promenne jen na ten cyklus...
pucmeloudek
Junior

Odeslat příspěvekod Fuller009 18. 10. 2011 13:20

soban píše:Fakt to vidím na - "Musím se odlišovat, však to překladač přebere......"

Že ty neznáš rozdíl významu ++i a i++ ještě neznamená, že to je něco co se nepoužívá... ++i se dá využít na spoustě místech k podstatnému zjednodušení výpočtů.
Překladač si to přebere tak, že i++ interpretuje právě jako ++i, protože nebereš v úvahu návratovou hodnotu tohoto výrazu.

soban píše:A to int v for taky není moc košér... prostě mě se tam nelíbí...."for ( int i = 0; i < delka; ++i)"

Tak tady se dost pleteš. nevím jak ty, ale já nežiju v c ANSI(nebo dokonce starší) kde nešli deklarovat proměnné mimo začátek funkce. V normě c99 je toto povolený, a dokonce doporučený zápis. Např kvůli
pucmeloudek píše:Krasne omezis platnost promenne jen na ten cyklus...
Fuller009
Junior

Odeslat příspěvekod soban 18. 10. 2011 15:10

Ale zde se nebavíme o C++ a pod..... pokud vidím dobře je v názvu pouze C.

Jinak já jsem se s ++i nesetkal ovšem netvrdím že to nemůže být výhodné použít v nějakých případech tak stejně použití int v for ovšem tam je to zase trošku diskutabilní pokud v programu používáme často for zda není lepší proměnnou definovat na začátku.
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod pucmeloudek 18. 10. 2011 21:58

sobane, tady se vsichni bavi o C, ne o C++. Samozrejme ze lze deklarovat promennou v cyklu i v obycejnem C (teda ne az tak obycnejnem, C99, popr. nejake proprietarni rozsireni predchoziho C90 nebo C89).
jinac lepsi neni deklarovat ji zvlast v zadnem pripade. Ani kdyz mas cykly 2 za sebou. Proste ta spolecna deklarace umozni tu promennou pouzivat i jinde a tim si koledujes o zbytecny problem z nepozornosti. Slusny prekladac stejne interne ty 2 promenne slouci na jedno pametove misto, takze ani na zasobniku nic neusetris. Dalsim duvodem pro definici primo ve foru je, ze vidis typ promenne primo v miste pouziti a nemusis ho hodinu hledat nekde na zacatku funkce...
pucmeloudek
Junior

Odeslat příspěvekod Fuller009 19. 10. 2011 09:23

soban píše:Ale zde se nebavíme o C++ a pod......

Kdybych se bavil o c++ psal bych o normách C99 a ANSI C? zmínil bych normu C++98 nebo která byla ta na které jsem se c++ učil(nevím jestli se už domluvili na novější verzi normy, ale 5 let zpět to bylo v plánu). Ale pokud mě paměť neklame tak v tomto případě C99 a C++98 mají stejné "znění".

soban píše:Jinak já jsem se s ++i nesetkal..

A víš aspoň ten rozdíl mezi těmi zápisy? ;-)


pucmeloudek píše: Slusny prekladac stejne interne ty 2 promenne slouci na jedno pametove misto


I kdyby nesloučil, tak tu paměť pro tu proměnou má alokovanou jen na běh cyklu a po konci cyklu by ji měl uvolnit. Jinak s tebou samozřejmně souhlasím.

Řekl bych že už jsme ale dost OT. Vše důležité k dotazu bylo už dávno řečeno.
Fuller009
Junior

Odeslat příspěvekod soban 19. 10. 2011 13:39

Jasně každý má nějaký spůsob psaní a pokud z nějakých důvodů nemusím ten zdroják optimalizovat (malá ram, rychlost atd...) tak většinou stačí jak to zoptimalizuje překladač. (a text mám zoptimalizovaný pro sebe abych se v tom sám vyznal....)
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod pucmeloudek 19. 10. 2011 23:02

Fuller009 píše:paměť pro tu proměnou má alokovanou jen na běh cyklu a po konci cyklu by ji měl uvolnit


je to samozrejme ouplne OT, ale tak pro uplnost - nemyslim, ze by to delal. proste na vstupu do funkce pripravi v zasobniku misto tak, aby ho bylo pro cely beh funkce dost, a na zaver ho zas vrati. aspon na x86 jsem nikdy zadnou obdobnou cilenou manipulaci s esp mimo prolog/epilog nevidel... ono by to stalo nejaky cas a to usporeny misto za to vesmes nestoji...
pucmeloudek
Junior

Odeslat příspěvekod Fuller009 20. 10. 2011 09:23

V optimalizacích překladačů se opravdu moc už nevyznám.. přecejen člověk zapomíná. Ale z logického hlediska To místo jistě neuvolní, jen si ho při překladu označí jako volné a případně ho využije později jinou proměnnou(jo v podstatě je interně sloučí jak si napsal dřív). Otázka uvolňování jak sjem ji napsal já vychází spíš z normy céčka - jak by se "mělo" chovat.

soban píše:Jasně každý má nějaký spůsob psaní a pokud z nějakých důvodů nemusím ten zdroják optimalizovat (malá ram, rychlost atd...) tak většinou stačí jak to zoptimalizuje překladač. (a text mám zoptimalizovaný pro sebe abych se v tom sám vyznal....)


Nepřipadá ti to v přímém rozporu s tvrzením

soban píše:Fakt to vidím na - "Musím se odlišovat, však to překladač přebere......"

Nebo jsi to bral podle tvrzení podle sebe soudím tebe?
Fuller009
Junior

Odeslat příspěvekod soban 20. 10. 2011 10:46

Ale to se nevylučuje.

Já to píšu nějak, a myslel jsem že prostě se chce za každou cenu odlišovat, ovšem vysvětlil že tak píše pořád......

Každý má na to nějaký názor. Svůj jsem vyjádřil, ovšem zakazovat takto psát for mu asi těžko můžu - to je jeho věc jak si to napíše pokud se v tom vyzná a je to pro něj čitelné.

Svoje názory jsme si řekly a víc to fakt nemá cenu rozmazávat - co člověk to jiný názor - překladač to přeloží stejně tak vlastně není co řešit.

Víc to fakt nemá cenu zde rozebírat pokud nepřijde někdo s něčím jiným jak převést char na číslo int.
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Předchozí stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků