cprogramming.com og visual c++

Tags:    c++

Hej

Jeg er begyndt at kigge lidt på C fordi jeg gerne vil lave et lille lib til at læse BMP filer. Kan C++ men fik aldrig lært C hvis i forstår hvad jeg mener/hvordan.

Jeg har 2 problemer:

Siden bruger nogle malloc statements sådan her f.eks.:

Fold kodeboks ind/udKode 


Hvortil jeg får fejlen: cannot convert from 'void *' to 'node *' ?

Et andet problem er:

Fold kodeboks ind/udKode 


Overflow error. Tror det er fordi den os sætter et usynligt \0 på? Virker bar underligt siden andre også må have havet samme fejl ellers og rapporteret den til cprogramming.com

Nogen der kan forklare om det er visual c++ eller cprogramming.com der er forkert på den?





Begge dine kode eksempler er valide i C men ikke i C++.
Hvis compileren er utilfreds er det fordi den tror at du oversætter C++ kode.

Den første kan du "fikse" med et cast:
root = (struct node *)malloc(sizeof(struct node));




En string literal ("ABCDEFGHIJ" i det her tilfælde) indeholder altid indholdet PLUS en null char, så den er ikke 10 chars, men 11. Så det er cprogramming der må have lavet en fejl.



Brian, i C er det lovligt, x kommer til at indeholde en streng uden 0 terminering.

Søren, jeg glemte at tilføje; hvorfor lære C hvis du allerede kan C++?



Prøvede at caste malloc som du foreslog, og lavedet et lille miniprogram:

Fold kodeboks ind/udKode 


Angående spørgsmålet om hvorfor jeg vil lære C når jeg kender C++ er vel lidt det samme som hvorfor lære assembly. Så kan jeg jo os spørge mig selv om hvorfor ikke bare glemme C++ nu hvor jeg kan Python.

Rent faktisk var det fordi jeg vil lave, som jeg også skrev først, et lille bmp bibliotek. C er en smule hurtigere end C++, og så tænkte jeg at så kunne jeg ligeså godt prøve lidt C, selvom jeg måske aldrig kommer til at arbejde med det igen.

Tak for jeres hjælp. :D

Er der nogen måde at 'slå' Visual C++ om til C 'mode'?



Indlæg senest redigeret d. 24.03.2009 22:29 af Bruger #14645
C er ikke hurtigere end C++. Hvis du laver præcis den samme kode i C som i C++, er der ingen forskel. Hvis du bruger nogle features i C++ vil C++ være langsommere, i andre tilfælde vil C++ være hurtigst.

Der kan være gode grunde til både at kunne C++ og Phyton (og java og php), men i mine øjne er ren c spild af tid i vore dage (med mindre man bruger en platform hvor der ikke er noget valg).

Ofte kan du få compileren til at compile som C ved at give filen .c som ekstension, i stedet for .cpp eller .cc Men du skal måske sætte det op i projekt options et sted. Min VisualC++ installation er defekt for tiden, og jeg er for doven til at installere en ny.

Angående din kode: C har ikke referencer. Der er ikke ret mange C compilere der tillader dig at erklære variabler inden for en for(...) statement.



Ja så begynder min betragtning af C da at falde. Med C++ features der 'slower' lidt mener du vel: templates, classes osv.. Og indbefatter det osse at undlade cout f.eks. og stadig bruge printf eller er det ligemeget?

Vidste ikke at C ikke havde referencer, troede det var en kernedel af C. Så den eneste måde at overføre en værdi til en funktion, og hvis man ikke gider at lave en pointer til, det er man bare nødt til pass-by-value.

I .Net er der muligheder for at læse specifikke datatyper ind når man læser fra en binær fil. Hvordan gøres det bedst i (Ikke .Net)?

Med casting eller atoi lignende funktioner eller?




Indlæg senest redigeret d. 25.03.2009 12:15 af Bruger #14645
Templates og classes er ikke i sig selv langsomme. Men hvis man bruger standard containere forkert/ikke optimalt kan de være langsomme. Hvis man har små member funktioner som man kalder ofte, og compileren ikke kan inline dem, kan det gå ud over performance. Og sådan er der en lang række andre hensyn. Det er der også i C, men i C++ kommer man lettere til at lave noget der ikke er optimalt.

Jeg ved ikke om << (cout, fstream) er langsommere end printf, jeg tror egentlig ikke der er den store forskel.

I C og C++ (uden .net) er man nødt til at lave sin egen "serialisering". Hvis man altid skal læse og skrive på den samme platform, kan man ofte nøjes med at lave en cast.



t