C pre zaciatocnika

Sekcia: Programovanie 29.05.2011 | 03:03
woody   Návštevník
ahoj, chcem sa zacat ucit c++ a potrebujem poradit nejaku dobru knizku s ktorou mi to pojde lahko. Tak ak poznate nieco dobre, pisane pre zaciatocnika tak napiste nazov, popripade poslite link na ebook. Dakujem.

Este sa chcem spytat ci ako zaciatocnik mam ist hned do c++ alebo sa mam zosnamit aj s obycajnym c. O tych jazykoch este vela neviem, tak kazda rada dobra. Mam skusenosti len s pascalom a delphi.
    • Re: C pre zaciatocnika 29.05.2011 | 05:14
      pepe   Návštevník
      Mistrovstvi v C++" od Stephena Pratu
    • Re: C pre zaciatocnika 29.05.2011 | 15:45
      Avatar Grawp   Používateľ
      Thinking in C++. Je zadarmo a je fakt geniálne písaná. Mne sa ten štýl páčil napr. ovela viac ako u Heroutovej učebnice jazyka C.

      Btw. najprv. treba vedieť C, pascal a delphi ti je nahovno. Dá sa povedať, že C++ oproti C je len nejaký pridaný syntax pre kompilátor ako constructors/destructors, access specifiers a podobne. OO orientované veci sú potom až V-TABLEs. Anyway, aj prvé 'prekladače' C++ len dosť jednoducho kontrolovali a prevádzali C++ kód na C.
      • Re: C pre zaciatocnika 29.05.2011 | 20:31
        woody   Návštevník
        dajujem .. presne tu som si aj nasiel a zatial som spokojny... hmmm, uz som na 155 strane v ebooku a zatial nemam pocit, ze by som potreboval C .. a pytal som sa este na jednom fore, kde mi radili obycajne C obist .. vraj chytim nejake zle zvyky ..
      • Re: C pre zaciatocnika 04.06.2011 | 10:11
        Avatar ferry openSUSE Leap  Používateľ
        Pre túto knihu nepotrebuješ vedieť C jazyk, skôr je to na škodu. Mňa to skôr mýlilo.
        Inak kniha je aj preložená a mala by sa dať zohnať pod názvom Myslíme v jazyku C++ I a II.
    • Re: C pre zaciatocnika 29.05.2011 | 20:37
      Avatar m4jkl   Používateľ
      najskor urcite c - herout
      potom sa treba naucit programovat objektovo. c++ je dost zlozity jazyk, takze by som kludne zvazil napr. javu. tam sa lahko naucis OO princip a potom sa mozes vratit k c++ a vybrat si z toho jazyka iba co potrebujes.
      • Re: C pre zaciatocnika 30.05.2011 | 00:34
        Avatar Grawp   Používateľ
        Myslím, že C++ je dosť jednoduchý jazyk, hoci sa tam dá zamotať pri roznych ambiguities, implicitných veciach, kedy použiť operátorovú a kedy konštruktorovú konverziu, atď.... ale je to dosť logické. Učiť sa kvoli C++ javu sa mi zdá zbytočné, najme keď Eckel venuje len OO prvé dve kapitoly.

        Btw. C++ je multiparadigm jazyk. Ja ho používam pri bežnom proceduránom programovaní (lebo OO je to vraj až pri použití polymorph...) mikrokontrolérov a kludne aj spolu s inline asm.
        • Re: C pre zaciatocnika 30.05.2011 | 02:11
          Avatar m4jkl   Používateľ
          no zas tak jednoduchy nebude, inak by neexistovali tie 1000+ stranove biblie. btw. aku vyhodu ma pouzivanie c++ pred klasickym ceckom pri programovani mikrokontrolerov?
          • Re: C pre zaciatocnika 30.05.2011 | 16:34
            Avatar Grawp   Používateľ
            konštruktory a deštruktory - v klasickom C trebalo napr. stále volať explictine init funkcie
            access specifiers!
            this pointer a member funkcie
            netreba písať typedef pri struct-och

            V podstate ide o efektívnejší (a pre mňa krajší) syntax... generovaný asm býva aj tak rovnaký.
            • Re: C pre zaciatocnika 30.05.2011 | 18:08
              Avatar m4jkl   Používateľ
              ale to asi programujes sam pre seba iba nie? alebo pracujes niekde vo firme a tam skutocne programujete mikrokontrolery v c++? podla mna musi byt ta binarka vo vysledku vacsia, ako keby si to pisal v samotnom cecku a kedze tie programy aj tak asi nebudu nejake extra dlhe, tak v tom c++ nevidim moc vyhody.
              • Re: C pre zaciatocnika 30.05.2011 | 22:11
                Avatar Grawp   Používateľ
                Pre seba.
                Nevidím dovod, prečo by ta binárka mala byť vačšia. Sám Eckel to vo svojej knihe rozoberá. Ak človek nepoužíva nejaký <dynamic_cast> a podobné fancy stuff, ten generovaný kód je rovnaký.
                Napr. funkcia ktorá uloží niečo do struct, potrebuje jej pointer. Či sa predá "tajne" ako this pointer, alebo explictine, tak či tak medzi stack a frame pointerom proste bude jedno miesto obsahujúce tento pointer, len syntax je iný.
                • Re: C pre zaciatocnika 30.05.2011 | 22:36
                  Avatar Fridolín Pokorný Fedora 21  Používateľ
                  Ono tych dovodov je niekolko. Uz samotny OOP si co to vyziada a napriklad u takych sablonach velkost binarky urcite pocitis. U "beznych" veciach je to asi identicke ale potom tu je otazka, ci to vobec je C++. :-) Kazdopadne na taketo sa urcite viac hodi/pouziva C.
                • Re: C pre zaciatocnika 30.05.2011 | 23:02
                  Avatar m4jkl   Používateľ
                  no generovany kod rovnaky nie je a da sa to lahko overit :) ale je fakt, ze ak zostanes iba u tried+konstruktorov/destruktorov, tak ta binarka zasa nebude o tolko vacsia. to uz si sa ale vzdal polymorfizmu, vynimiek,... a nakoniec narazis na to, ze kompilator pre C optimalizuje ovela lepsie ako ten pre C++ :) ale to uz sme odbocili, pouzitie c++ v mikrokontroleroch urcite nie je ziadna fatalna chyba, zalezi pripad od pripadu.
                  • Re: C pre zaciatocnika 31.05.2011 | 00:13
                    Avatar Grawp   Používateľ
                    Spravil som malý experiment. Zobral som starý AVR projekt písaný v C: vlastná knižnica k nokia 3310 lcd, hello example a UART buffer (to pre zaujímavosť).
                    Skompiloval som ho a potom som len prepísal prípony .c na .cpp, modifikoval Makefile a skompiloval som ho znovu. C binárka mala 5125 B, C++ mala 4999B. Tak som sa rozhodol skontrovať.
                    V makefile som zmenil len dve veci !!! avr-gcc za avr-g++ a -std=c99 za -ansi.

                    Takže generovaný kód je očividne iný, to máš pravdu. Len to C++ to nejak lepšie zoptimalizovalo. Použitá optimalizácia bola -Os.
                    • Re: C pre zaciatocnika 31.05.2011 | 00:39
                      Avatar borg Fedora  Administrátor
                      mensia binarka neznamena lepsia optimalizacia
                      • Re: C pre zaciatocnika 31.05.2011 | 11:25
                        Avatar Grawp   Používateľ
                        Asi si nečítal príspevky pred tým. Menšia binárka bola lepšie optimalizovaná, lebo celý čas tu bol CIEĽ práve VEĽKOSŤ... (m4jkl: "podla mna musi byt ta binarka vo vysledku vacsia").
                        Sám parameter -Os znamená optimalize primarily for size (not for speed or something else).
                        • Re: C pre zaciatocnika 31.05.2011 | 12:09
                          Avatar borg Fedora  Administrátor
                          reagoval som na velkost binarky vs optimalizacia.
                          • Re: C pre zaciatocnika 02.06.2011 | 19:56
                            Avatar Grawp   Používateľ
                            Prečo menšia binárka neznamená lepšiu size optimalizáciu?
                            btw. to C++ sa mi oplatí už len pre namespaces keď už pre nič iné.
                            • Re: C pre zaciatocnika 03.06.2011 | 23:05
                              Avatar borg Fedora  Administrátor
                              neviem ci sme sa pochopili. narazal som na to, ze mensia binarka (neberieme v uvahu -Os) neznamena lepsiu optimalizaciu. ak mas nejake funkcie, metody ako inline (alebo sa kompilator rozhodne, ze nieco buchne ako inline), tak velkost binarky bude vacsi, ale aj performance bude takisto lepsi
                    • Re: C pre zaciatocnika 31.05.2011 | 01:04
                      Avatar m4jkl   Používateľ
                      celkom zaujimave, nenapada ma co tam to g++ mohlo vyhodit naviac oproti gcc. v kazdom pripade ja som to s tym kompilatorom myslel trosku inak -> nejaky mikrokontroler ku ktoremu vyrobca dodava/ponuka svoj kompilator pre c a c++ a ty nemozes pouzit klasicke gcc. vtedy sa da predpokladat, ze ten c++ kompilator bude na nizsej urovni, lebo to obycajne cecko je predsa len standard pre tieto veci.