Avatar billede dank Nybegynder
26. juni 2004 - 13:01 Der er 15 kommentarer og
3 løsninger

forskel på C & C++

Jeg bruger primært Perl p.t. til lidt forskellige småkode projekter til Linux bokse, men kunne godt tænke mig at lære lidt C/C++

Hvad skal man kaste sig over?

Hvad er forskellen på C & C++
Avatar billede bertelbrander Novice
26. juni 2004 - 13:14 #1
En liste af forskelle:

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1047588051&id=1043284376

Der er normalt ikke grund til at lære C, medmindre at du vil programmere Linux Kernen eller tilsvarende specielle ting, så: Kast dig over C++.
Avatar billede dank Nybegynder
26. juni 2004 - 13:21 #2
Linux kerne er netop en af de sjove ting jo :o)

Men... så vidt jeg kan forstå så er der flere muligheder med C++, men omvendt, så ser det for mig ud som om, langt de fleste "seriøse" applikationer til *nix systemer er lavet i C. Hvis man f.eks. vil "hacke" i open source applikationer (f.eks. Postfix, Qmail) o.s.v...

Så ser det ud til at C er vejen frem?

Er der nogen forskel på performance?
Avatar billede strych9 Praktikant
26. juni 2004 - 13:59 #3
Den største intellektuelle kapital derude i open source communities er afgjort i C som også dank skriver.
Det meste af Gnome er feks skrevet i C, og de fleste toolkits og libs er også i C. Det kommer lidt an på hvad du vil lave. Hvis du feks vil lave applikationer baseret på qt (www.trolltech.com - Hele KDE er baseret på qt) så er det afgjort bedst at kende C++. Hvis du vil lave gtk programmer så er C måske bedst, og mange af fremtidens Gnome programmer spåes at være skrevet i C# som oprindeligt er et Microsoft sprog.
Til små konsol programmer kan du passende benytte C. Det er jo faktisk det som C blev lavet og designet til i hin tid. Til lidt større projekter hvor der er meget kode genbrug kan man overveje C++.

Angående performance har jeg hørt rygter om at performance skulle være 10% bedre i C generelt, men men men... Man kan komme langt mht performance ved bare at kende et af sprogene rigtig godt. Der er mange der tror at de kan finde ud af at skrive C, men i virkeligheden ikke rigtigt kan alligevel. Det fører til dårlig performance og sikkerhedsproblemer i form af bufferoverflows ligegyldigt om man skriver C eller C++.

Den gang Bjarne Stroustrup lavede C++ hed det vist i starten "C med klasser", og det er da også den primære gennemgribende forskel. I C++ er det mere oplagt at man holder sig til et objektorienteret programmerings paradigme, selv om man ikke nødvendigvis behøver at gøre det. Så koncepterne bag klasser, objekter, inheritance, polymorphism, encapsulation osv er specifikt for C++, men hvis man ikke vil bruge dem i designet kan man lige så godt holde sig til et "procedural language" som C.
Avatar billede arne_v Ekspert
26. juni 2004 - 15:12 #4
Meget store dele af open source programmerne er skrevet i C.

Det er der nok primært historiske grunde til. Det er kun godt 10 år
siden man begyndte at betragte C++ som seriøst valg til et stykke software.

Og enten er de pågældende programmer startet inden eller så har udviklerne
ihvertfald startet deres programmerings karriere inden.

Men derfor vil jeg alligevel klart anbefale at du lærer C++.

C++ er en næsten ren udvidelse af C d.v.s. at du ved at lære C++
sagtens kan læse og forstå ældre C programmer.

Men samtidigt vil du kunne udvikle noger mere moderne programmer via
de objektorienterede features i C++.

Vi er jo ikke for godt 10 år siden.

Men jeg synes da absolut at du skal lære det. Som seriøs Linux bruger
er C/C++ kunnen en del af almindelig dannelse.

:-)

C++ er et meget større sprog end C. Kort sagt er C++ en objekt orienteret
overbygning på C. For flere detaljer se Bertels link.
Avatar billede dank Nybegynder
26. juni 2004 - 15:44 #5
arne_v> Good point.. Men når strych9 smider om sig med ord som: objekter, inheritance, polymorphism, encapsulation, så står jeg af. Jeg er selvlært, og en del af disse termer kender de fleste næppe medmindre de er skolet på den eller anden måde i programmering.

Så tænker jeg egentligt, at det må være nemmere at lære, hvis der er færre muligheder. Det kræver vel så flere kodelinier velsagtens, men det bliver vel i sidste ende et spørgsmål om produktvitet og evne til at overskue 'større' projekter.

.... Men ok .... med Arne_v's argumenter er rimelige gode :)

arne_v> "Men jeg synes da absolut at du skal lære det. Som seriøs Linux bruger
er C/C++ kunnen en del af almindelig dannelse."

Enig.. alm. brug og drift af *nix bokse udfordrer mig ikke længere, derfor vil det være naturligt for mig at dykke længere ind... Men bl.a. at kunne skrive moduler til bl.a. Kernen synes jeg er spændende... Men så er det vel C der skal bruges :)

Det er svært... Tror bare jeg kaster mig ud i C++ :o)
Avatar billede strych9 Praktikant
26. juni 2004 - 15:58 #6
Jeg har for tiden opgivet at blive programmør. Tror ikke jeg bliver dygtig til det nogensinde. I mit sidste forsøg på C++ begyndte jeg at gabe og gik død da bogen kom til netop inheritance, polymorphism, encapsulation osv. Ved godt hvad det er nu, men for f..... da også.
Der mangler nogle bøger som har en masse småopgaver som man kan løse og hvor der virkelig er tænkt over learning-by-doing og hvor der højest er et par siders teori ad gangen. Den jeg er stødt på som er tættest på det er "Practical C++" fra O'Reilly. Men måske er det for mig bare et spørgsmål om at komme på kursus og blive holdt lidt til ilden der i et stykke tid. C++ er i hvert fald en hård en at komme igennem med mindre interessen virkelig er der og man ikke synes det er småkedeligt at læse store bøger om det.
Avatar billede strych9 Praktikant
26. juni 2004 - 16:01 #7
Hvordan er du egentlig blevet så sej til det Arne?
Avatar billede arne_v Ekspert
26. juni 2004 - 16:13 #8
C++ er et svært sprog. Men man behøver ikke lære det hele i et hug. Man kan starte
med det mest simple og så bevæge sig ind i de mere komplekse ommråder
efter behov.

Man kan også godt have nytte af nogle af C++'s objekt orienterede features
uden at være super skrap OO'er.

Som sagt er C++ en næsten ren udvidelse af C og derfor vil første del af
en C++ lærebog en og en C lærebog ligne hinanden.

Men at lære C++ kræver:
1) lidt tålmodighed
2) en masse øvelse
3) en fornuftig bog at lære fra
Avatar billede arne_v Ekspert
26. juni 2004 - 16:14 #9
strych>

Jeg startede med C++ i 1989. Og har lært en smule gennem årene.
Avatar billede simon.ulsnes Nybegynder
26. juni 2004 - 16:59 #10
En af de rigtig fede ting ved C++, som jeg altid river håret af migselv i mangel af når jeg en sjælden gang programmerer C, er streams. Tag f.eks. cout. Den gør det samme som stdio-funktionen printf, men i stedet for den latterlige syntaks ("format", var1, var2, var3, ...), kan man udskrive alle typer der implementerer <<-operatoren. Som følgende:

using namespace std;
char *str1 = "Hello world!";
string str2 = "Number of foos: ";
int num_foos = 3;

cout << str1 << endl << str2 << num_foos << endl;

(endl er en indbygget konstant der er lig med et linjeskift)

På det seneste er jeg også blevet helt forelsket i operator-overloading, som bl.a. kan bruges til at lave hjemmelavede pointers (smart pointers og/eller master pointers - overloading af ->) eller hjemmebryggede dynamiske arrays og lister (overloading af []). Alt dette kombineret med templates, og du har et 100% typesikkert, højeffektivt sæt classes som forhindrer enhver form for gentagelse af kode.

(jeg mener et par af ovennævnte features bruges i STL, f.eks. af vector - ret mig hvis jeg tager fejl)

- Simon
Avatar billede arne_v Ekspert
26. juni 2004 - 17:02 #11
Smag og behag er forskellige.

Jeg synes at brug af << og >> til IO er et misfoster.
Avatar billede bertelbrander Novice
27. juni 2004 - 00:31 #12
Som gammel C programmør havde jeg også svært ved at vende mig til << og >> men må indrømme at jeg begynder at synes om dem, selv om jeg stadig synes at syntaxen er sær.

De har to store fordele:
1: De er typesikre, man risikerer ikke at komme til at udskrive en int som var det en streng.
2: De kan udvides, så hvis man laver en ny type, kan man blodt lave en << og >> operator til typen, og så behøver brugeren ikke at bekymre sig om hvordan man udskriver og indlæser dem.
Avatar billede arne_v Ekspert
27. juni 2004 - 00:36 #13
Jo men begge de to har Java og C# jo løst på anden vis.
Avatar billede bertelbrander Novice
27. juni 2004 - 00:40 #14
Jeg kender ikke java eller C#, sammenligningen gik på C's fgets/scanf/printf og C++'s << >>. Her mener jeg at << og >> har fordele.

Jeg vil gerne tro at man havde kunnet løse begge problemer i C++ på mere elegante måde.
Avatar billede dank Nybegynder
27. juni 2004 - 00:56 #15
tak for alle de gode input indtil nu.. opretter i svar.. hæver points pga kvalitet i indlæg. tjener også godt som reference til andre synes jeg :)
Avatar billede arne_v Ekspert
27. juni 2004 - 09:34 #16
svar
Avatar billede simon.ulsnes Nybegynder
27. juni 2004 - 09:45 #17
Her er et svar, hvis du mener at points tilkommer mig... ;-)

Jeg føler mig som en luksusluder. :-D

- Simon
Avatar billede strych9 Praktikant
27. juni 2004 - 12:59 #18
svar 2
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester