Výhody C oproti C++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výhody C oproti C++ – C / C++ – Fórum – Programujte.comVýhody C oproti C++ – C / C++ – Fórum – Programujte.com

 

PiranhaGreg0
Stálý člen
12. 4. 2015   #1
-
0
-

Všiml jsem si, že tu někteří preferují C oproti C++. Pojďme tedy té diskuzi udělat vlastní topik  .

Takže otázka... Proč nebo v jakých případech preferujete C oproti C++?

Já oba jazyky využívám tak nastejno. Důvody proč někdy raději sáhnu po C:

  • C++ přináší spousty a spousty nových možností, jak zadaný problém vyřešit a někdy mám pocit, že strávím víc času hledáním nejlepšího postupu, než pak samotnou implementací. V C je to všechno mnohem přímočařejší.
  • Pokud pracuji s binárními surovými daty, je to jednodušší v C. V C++ je neustále potřeba přetypovávat. A i případný malloc, free, memxxx, atd. mi k těmto úlohám sedí víc.
  • Dělám na projektu, který se píše pouze v C.
  • V C píšu často ukázkové programy pro ostatní, protože C++ vypadá na první pohled dost složitě a bojím se, aby je to nezmátlo. V C je nemá moc co překvapit.

Víc mě teď asi nenapadne. Ještě by se možná hodil zmínit Blub Paradox

As long as our hypothetical Blub programmer is looking down the power continuum, he knows he's looking down. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up. What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub.

Jsem zvědavý co vymyslíte  . 

Nahlásit jako SPAM
IP: 109.81.210.–
KIIV
~ Moderátor
+43
God of flame
13. 4. 2015   #2
-
0
-

A ted zkus neco slozitejsiho, neco, co otvira hromadu zdroju, a kdyz kterykoliv z nich selze, tak musis v opacnem poradi zase vsechny zabrane zdroje pozavirat... V C je par moznosti, ale ani jedna neni zrovna "snadna" a to vcetne hromady goto... nebo pouzivat zasobniky s fukncema, co se bude pak uvolnovat...

Zatimco v C++ je, v jako snad v jedinem jazyce, moznost paradigmatu RAII - Resource Aquisition Is Initialization - tj. mas specialni objekty, kterym pri vytvoreni predhodis zdroj, a oni ho zaberou. Pri vyskoceni mimo scope to zase uvolni automaticky.

To same se strasne hodi v pripade, ze v c++ zacnes pouzivat vyjimky.

Taky v C dost chybi reference.

Takovej sort v C++ je rychlejsi nez v C, protoze pouziva sablony a predavaji se mu rovnou spravny typy. V C se musi pretypovat vse na void pointery, to same se predava porovnavaci funkce jako pointer, .. spousta neprimych volani a to dokaze pekne zdrzet.

No proste si poslechni prednasku od Stroustrupa o C++11, tam je to skoro vse vyjmenovany.

Samozrejme na jednocipy se tak moc featur z c++ pouzit neda, protoze jsou na to maly. Ale treba arduino ide jede na c++ tez. S objektama je vse snadnejsi.

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
13. 4. 2015   #3
-
0
-

U nás na škole začínáme v prvním semestru jazykem C++ a teprve ve druhém máme C. Svým způsobem to nedává smysl, proč se učit nejprve jazyk nabízející tolik nových featur a pak mít další semestr zabraný předmětem, který už vlastně z prvního semestru umíš?

Bavil jsem se o tom s učitelem a bylo mi řečeno, že dřív měli lidi, co programují strukturovaně, problém přejít na objektové programování a proto jsou předměty poskládány tak, jak jsou, abychom problém neměli také.

A musím říct, že poté, co jsem se seznámil s objekty, tak se mi holé C vůbec, ale vůbec nelíbí. Osobně si myslím, že se stejně nikdy nedostanu k takové specializaci, že bych musel použít holé C namísto C++, protože C++ by daná platforma špatně zvládala.

Nahlásit jako SPAM
IP: 213.226.234.–
Inject all the dependencies!
13. 4. 2015   #4
-
0
-

Dělám pro Windows a na jednočipech.

Pod Windows vede jednoznačně C++ jednak kvůli tvorbě GUI (VCL je objektová), jednak kvůli možnosti použití již hotových knihoven. Hodně aplikací by v C bylo těžké udělat, C++ mi nabízí řadu usnadnění. Mockrát jsem se přesvědčil, že dobře udělaný objektový koncept znamená méně práce. Z pohledu mých aplikací má i podprůměrný počítač obrovský nadbytek systémových prostředků, takže hon za jejich efektivním využitím je v drtivé většině případů jen plýtváním časem a úsilím.

Na jednočipech už to tak jednoznačné není. Na jednoduché věci použít C++ je jako jít s kladivem na komára. Navíc s ohledem na možnosti jednočipu je C++ implementováno jen částečně, např. nelze dynamicky vytvářet objekty (zkušenost s Atmel Studiem na ATMEGA 8A). Naproti tomu pokud je aplikace trochu složitější i zde se vyplatí použít (byť osekané) C++ (překvapivě i na tu 8bitovou megu). Tady platí volit podle složitosti aplikace a možností HW.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:fdb9:ab...–
Matěj Andrle+1
Grafoman
13. 4. 2015   #5
-
0
-

#2 KIIV
D/D2 Navíc tento jazyk se dá použít naprosto ve všech C++ projektech a ve většině C... Pročež navidím nic k řešení - tento jazyk je odpověď.

Nahlásit jako SPAM
IP: 78.136.156.–
PiranhaGreg0
Stálý člen
13. 4. 2015   #6
-
0
-

#3 ondrej39
No mě by celkově docela zajímalo, jak se pak takový C učí, když už má člověk zkušenosti s C++  . Zaprvé bych neměl totálně žádnou motivaci zahodit všechny featury z C++ a pak taky C nenabízí nic nového. Jen se pracuje s pamětí přes jiný funkce, možná je tam ještě potřeba osvětlit funkce ze string.h a člověk si musí víc zvyknout na ukazatele a ruční psaní kódu.

#4 hlucheucho
Osobně bych GUI aplikace čistě pro Windows psal raději v C# pod .NET. Těžko se mi hledá argument, proč to řešit v C++. Kritický sekce samozřejmě není problém napsat v C++ a pak je volat ze C#.

Ještě k tomu psaní pro malé čipy... Doteď moc nechápu, v čem tkví výhoda psát to v C, když C++ se může přeložit do strojových instrukcí úplně stejně.

Nahlásit jako SPAM
IP: 109.81.210.–
KIIV
~ Moderátor
+43
God of flame
13. 4. 2015   #7
-
0
-

#6 PiranhaGreg
pro jednocipy C++ nenabizi o moc vic nez C, protoze na to nemaji dostatek prostredku. Takze jedine, co tam jde vyuzit extra jsou objekty, da se vyuzit raii, ale uz to tam nebyva tak casto. A mozna nejaky sablony a v arduinu se hodne pouziva i polymorfizmus a dedicnost interfacu (jako print metody k ruznym objektum/printable interface) a tak.

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
13. 4. 2015   #8
-
0
-

#6 PiranhaGreg
nedělám jen GUI, často píšu i služby. Na C# nebo .Net bych se musel přeučit, pořídit jiné IDE, problémy s přenositelností kódu... v tom mne zaměstnavatel nepodpoří.  Jednočipy se dnes používají i na jednoduchou logiku, dokonce i kombinační. Něco takového "znásilňovat" do objektů nedává smysl.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:fdb9:ab...–
Matěj Andrle+1
Grafoman
13. 4. 2015   #9
-
0
-

#8 hlucheucho
Co to plácáš? C++ není přenositelný! A naopak Mono je multiplatformní! :D Pročež tvé argumenty jsou zcela zcestné... C# je jednodušší, efektivnější, ... Navíc když-už bys nechtěl v .NET používat C#, tak můžeš klidně i Visual C++! No a pak tu máme F#, J#, K#, Iron Phyton, ...

Nahlásit jako SPAM
IP: 78.136.162.–
13. 4. 2015   #10
-
0
-

#7 KIIV
přetěžování funkcí a metod, i to může být motivace k použití C++ na jednočipu. U posledního projektu jsem C++ volil kvůli dědičnosti a polymorfismu. 

Nahlásit jako SPAM
IP: 2001:67c:1222:800:fdb9:ab...–
ondrej39+1
Věrný člen
13. 4. 2015   #11
-
0
-

#6 PiranhaGreg
Naštěstí pro některé, bohužel pro ty, které zajímají nové vychytávky C++, jsme stejně hodně věcí dělali v C++ ručně. Začalo to použitím char pointeru pro uchování řetězce a končilo naprostým ignorováním "pointery používejte jen v případě, že už to fakt jinak nejde".

O constexpr, rvalue, chytrých ukazatelích ani nemluvě. Takže to nebylo ani tak, že jsme zahodili všechny vychytávky z C++, protože my skoro žádné nepoužívali. Chápu, že cílem je naučit se programovat a dost lidí, včetně mě, se s programováním setkalo poprvé právě až v prvním semestru, když se na to ale zpětně dívám, rozhodně bych učitele pochopil, kdyby nám řekl, ať např. po seznámení s poli se statickou velikostí používáme na dynamické pole std::vector, namísto toho, abych si ho programovali sami.

Nahlásit jako SPAM
IP: 213.226.234.–
Inject all the dependencies!
PiranhaGreg0
Stálý člen
13. 4. 2015   #12
-
0
-

#11 ondrej39
Právě i kvůli té dynamické alokaci paměti je lepší začínat s C. Protože tam žádné vectory a podobně nejsou. Kdybych pak přecházel další semestr na C++, tak bych akorát zmínil, že místo mallocu je tu new, místo free je delete a pak bych se k ruční alokaci paměti vrátil až při vysvětlování smart pointerů.

Musím ale zas připustit, že na argumentu "je lepší začít s OOP" něco je. Znám pár lidí, co začali programovat procedurálně a OOP už nepřišli na chuť. Neznám ale člověka co začínal s OOP a později ho zatracoval  .

Nahlásit jako SPAM
IP: 109.81.210.–
13. 4. 2015   #13
-
0
-

#9 Matěj Andrle
kdyby C++ nebylo přenositelný, neexistovalo by IDE pro multiplatformní vývoj. Když v C++ Builderu napíšu kód s FireMonkey, tak mi půjde zkompilovat pro Windows 32 a 64 bitů, Android, Mac. Kód převzatý z Windows aplikace a vložený do Atmel Studia uměl připojit 32-bitový jednočip po síti k serveru. Z toho vyplývá jediné: kód C++ je s omezeními přenositelný.

Že to jde i ve Visual C++ je hezké, ale i to Visual C++ stojí peníze. Moje přeučení na C#, Net či cokoliv jiného stojí čas a tedy taky peníze. A nejsilnější argument je když šéf řekne ne. 

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:fdb9:ab...–
Matěj Andrle+1
Grafoman
13. 4. 2015   #14
-
0
-

#13 hlucheucho
D2 (Lze použít i v rozjetém C++ projektu.)

Nahlásit jako SPAM
IP: 78.136.162.–
PiranhaGreg0
Stálý člen
13. 4. 2015   #15
-
0
-

#9 Matěj Andrle
Mono je parodie na .NET 3.0, která ani pořádně nefunguje. Použitelná je max na konzolový aplikace. Když už píšu v C#, tak se vším všudy. Tedy pro WPF s databindingem a kupou asynchronních operací. Tohle není mono schopný podporovat ani za 10 let.

Nahlásit jako SPAM
IP: 109.81.210.–
KIIV
~ Moderátor
+43
God of flame
13. 4. 2015   #16
-
0
-

#12 PiranhaGreg
Ja treba zacal proceduralne a experimentoval sem s "objektama" uz v tom turbo pascalu. Sice tam byly dost omezeny, ale bylo to zjednoduseni, oproti ciste proceduralnimu pristupu.

Na druhou stranu jsem se v zacatcich setkal i s objektama v javascriptu (tenkrat jeste IE 3). Takze je pravda, ze jsem mel nejakou prupravu.

Ale opravdovou silu OOP v c++ clovek poznal, az kdyz pochopil polymorfizmus a tak (no proste poradne pochopit OOP mi trvalo peknejch par let - vlastne, az kdyz sme se o tom ucili na vejsce, tak mi to vse do sebe pekne zacvaklo) - ale clovek musi delat neco slozitejsiho. Ukazkovy priklady jsou vetsinou moc "ukazkove" a nepouzitelne v realu.

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
PiranhaGreg0
Stálý člen
13. 4. 2015   #17
-
0
-

#16 KIIV
No nevím jestli je JS zrovna dobrej příklad OOP jazyka  Tam je to spíš založený na prototypování a funguje to celý trochu jinak.

Já se jako první jazyk učil C#, kterej je naštěstí primárně zaměřený na OOP a myslím si, že plně jsem ten koncept pochopil až tak po 3 - 4 letech. Zapouzdření je docela intuitivní, to člověk pochopí hned. Věci okolo abstraktních tříd, dědičnosti a polymorfismu už jsou horší, ale taky se dají celkem rychle vysledovat jejich výhody. Nejtěžší je ale umět rozdělit jednotlivé části programu do různých objektů tak, aby byla komunikace mezi nimi přirozená a jednotlivé objekty fungovali skutečně samostatně.

Jsem docela rád že jsem se OOP neučil jako první v C++. Přijde mi, že tady se ta myšlenka až moc utápí v implementaci. Třeba object slicing mi přijde vyloženě jako kudla do zad, které se docela špatně vyhýbá  .

Nahlásit jako SPAM
IP: 109.81.210.–
KIIV
~ Moderátor
+43
God of flame
13. 4. 2015   #18
-
0
-

#17 PiranhaGreg
mluvim o roce 97/98, to jeste C# ani neexistoval. Jsem byl na netu mozna do hodky denne, protoze to bylo zatracene drahy, pekne po vytacenem spojeni. No a Js to byl proto, ze tenkrat frontpage ukazoval moznosti, co se nad objektem da vyuzit (pak to zahadne zmizelo v dalsich verzich a tim sem s js skoncil). Bez toho bych se asi moc nehnul.

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
13. 4. 2015   #19
-
0
-

#17 PiranhaGreg
Připadá mi, že pochopit OOP až po přibližně 3 - 4 letech je dost dlouhá doba. Polymorfismus, dědičnost a tak mně začaly dávat smysl asi tak po 3-4 měsících programování v C++ a to si myslím, že jsem úplně blbej :/.

Nahlásit jako SPAM
IP: 195.113.207.–
Inject all the dependencies!
vitamin+8
Grafoman
14. 4. 2015   #20
-
0
-

C ma oproti C++ a inym jazykom vyhodu ze kompilator je skoro vsade.

Dalsia vyhoda je v tom ze s C sa dobre pouziva z inych jazykov, vdaka tomu ze C nema pretazovanie operatorov, funkcii, namespaces, metody, templaty a ine vlastnosti ktore vyzaduju name mangling... Takze ked volate funckiu z 1 jazyka v inom jazyku, tak sa to velmi casto robi cez C interface.

C je jednoduchy jazyk (neznamena to e sa v nom pise jednoducho).

Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 95 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý