Sprachliche Unterschiede zwischen C und C++?
-
Was sind es denn für Unterschiede? Bitte kein GETROLLE!
C hat kein Boolean, z. B. mit enum deklarieren.
C ist nicht objektorientiert.
C ist maschinennäher als C++.Details Details Details...
-
Incompatibilities between ISO C and ISO C++
C hat kein Boolean, z. B. mit enum deklarieren.
Doch, C99 hat _Bool bzw. auch bool, wenn du stdbool.h einbindest.
C ist nicht objektorientiert.
Was soll das heißen, C++ "ist" auch nicht objektorientiert. Etwas detaillierter wär nicht schlecht
C ist maschinennäher als C++.
Das ist so allgemein gesagt falsch.
-
Stimmt es nicht, dass in Bereich der Hardware-Programmierung mehr C eingesetzt wird als C++??
Es kann sein, dass die Leute, die dort arbeiten, seit Jahren mit C arbeiten statt mit C++.
.....................
Was mir noch aufgefallen ist, dass beim GNU-Compiler das
for(int i=0; ....)
nicht geht, stattdessen
int i; for(i=0; ...)
-
$ cat foo.c int main(void) { for (int i = 0; i < 10; i++) { } } $ gcc -std=c99 foo.c $
-
untschied schrieb:
Stimmt es nicht, dass in Bereich der Hardware-Programmierung mehr C eingesetzt wird als C++??
Stimmt, aber das hat nichts mit den Spracheigenschaften an sich zu tun.
Was mir noch aufgefallen ist, dass beim GNU-Compiler das
for(int i=0; ....)
nicht geht, stattdessen
int i; for(i=0; ...)
Nur im strengen C89-Modus, d.h. normalerweise wenn du einen gcc < 3.0 mit -ansi betreibst. Ohne -ansi kann er's, bei gcc ab 3.0 schaltet -ansi den C99-Modus ein (alternativ mit --std=c99) und erlaubt damit auch Deklarationen im for-init-statement.
-
untschied schrieb:
Was sind es denn für Unterschiede? Bitte kein GETROLLE!
kann nix dafür, daß die unwissenden zu plärren anfangen werden, sobald einer sagt, daß c schrecklich veraltet ist und keinerlei vorteile gegenüber c++ hat. und irgendeiner wird das bestimmt sagen. ist bei so einem thema nicht vermeidlich. aber soll man es überhaupt vermeiden? wir sind doch keine anwälte, sondern techniker. wir müssen nicht lügen und nicht diplomatisch sein.
C hat kein Boolean, z. B. mit enum deklarieren.
bool? hab aber schon code mit bool gesehen. wurde das includiert? steckt echt nur ein int dahilter? also konkreter: was ergibt int x=(bool)2+(bool(3); ?
C ist nicht objektorientiert.
doch. siehe fopen, fclose etc. nicht die sprachen sind oo, sondern die leute sind es, und das sieht man den programmen und bibliotheken dann an.
C ist maschinennäher als C++.
man kann sich mit c++ ohne großen aufwand weiter von der mschine entfernen. man kann aber auch ohne großen aufwand sehr nah an der maschine bleiben und code bauen, den die maschine lieber hat als den von c. ich erinnere nur mal an die alten nullterminierten strings. heute darf man zwei zeiger nehmen. man braucht nicht mehr im string zu hudeln, wenn man einen tokenizer baut. die ewig-lästigen aufrufe von strlen fallen weg. irgendwie ist das dichter an der maschine (am prozessor) als nullterminierte strings. aber weiter von der veralteten betriebsystem-api. naja, die ist ja auch dummerweise in c gemacht.
-
volkard schrieb:
C hat kein Boolean, z. B. mit enum deklarieren.
bool? hab aber schon code mit bool gesehen. wurde das includiert? steckt echt nur ein int dahilter? also konkreter: was ergibt int x=(bool)2+(bool(3); ?
Hinter bool steckt _Bool, welches sich genau wie das C++-bool verhält. x wird also 2 zugewiesen.
C ist nicht objektorientiert.
doch. siehe fopen, fclose etc. nicht die sprachen sind oo, sondern die leute sind es, und das sieht man den programmen und bibliotheken dann an.
stdio ist nicht OOP, denn dazu gehört noch ein wenig mehr als nur abstrakte Datentypen. Vererbung würde mir da einfallen, oder Polymorphie.
-
volkard schrieb:
kann nix dafür, daß die unwissenden zu plärren anfangen werden, sobald einer sagt, daß c schrecklich veraltet ist und keinerlei vorteile gegenüber c++ hat.
C hat ja auch einen Vorteil gegenüber C++ -> es ist leichter vernünftige Compiler dafür zu schreiben
-
Shade Of Mine schrieb:
C hat ja auch einen Vorteil gegenüber C++ -> es ist leichter vernünftige Compiler dafür zu schreiben
jup.
-
Ach kommt schon, ich frage mal so:
Wenn ihr gefragt werdet, was denn die Unterschiede zwischen C und C++ sind, welche Antworten würdet ihr darauf geben?
-
Die gleiche wie Bashar:
http://david.tribble.com/text/cdiffs.htm
-
1. anonymous unions
2. classes
3. constructors and destructors
4. exceptions and try/catch blocks
5. external function linkages (e.g., extern "C")
6. function overloading
7. member functions
8. namespaces
9. new and delete operators and functions
10. operator overloading
11. reference types
12. standard template library (STL)
13. template classes
14. template functions....................
- akzeptiere ich
- heißt das, dass C keine Klassenhierachien unterstüzt?
- akzeptiere ich
- akzeptiere ich
- verstehe ich nicht!
- akzeptiere ich
- akzeptiere ich
- akzeptiere ich
- akzeptiere ich
- akzeptiere ich
- C hat doch auch Pointer und Referenzen
- akzeptiere ich
- akzeptiere ich
- akzeptiere ich
-
untschied schrieb:
Ach kommt schon, ich frage mal so:
Wenn ihr gefragt werdet, was denn die Unterschiede zwischen C und C++ sind, welche Antworten würdet ihr darauf geben?ich würde wohl sowas sagen wie:
die reinen sprachen sind sehr ähnlich. c++ kann ein paar sachen mehr, die für objektorientierte programmierung sehr angenehm sind und kann auch sonst ein paar sachen mehr, die zu weniger fehleranfälligem code führen. ist dafür aber auch um einiges komplexer geworden.
wichtige unterschiede sind aber in den sprachen nicht zu suchen, sondern in den gemeinden um die sprachen. es gibt inzwischen einen modernen c++-stil, der sich ganz erheblich von anderen stilrichtungen unterscheidet. insesondere vom üblichen stil in c. normalerweise meine ich mit "c++" nicht die reine sprache, sonbdern den stil. und c++-programme kann man in jeder sprache bauen (ich sage hier bewusst bauen, nicht schreiben).
...
und dann je nach interesse kann's so ne dreiveirtel stunde weitergehen.
-
unterschied schrieb:
2. classes
5. external function linkages (e.g., extern "C")
11. reference types- heißt das, dass C keine Klassenhierachien unterstüzt?
Das kann man da zwar nicht rauslesen (Fehler in der Liste anscheinend, inheritance fehlt), aber ansonsten stimmt das. Es gibt keine Vererbung in C.
- verstehe ich nicht!
Was verstehst du nicht? Dass es extern "C" nicht gibt? Gibts halt nicht :p Oder was das in C++ macht?
- C hat doch auch Pointer und Referenzen
Nö, C hat keine Referenzen.
-
untschied schrieb:
Wenn ihr gefragt werdet, was denn die Unterschiede zwischen C und C++ sind, welche Antworten würdet ihr darauf geben?
Grob gesagt, C hat keine Namensräume, Klassen, Templates und Exceptions. Alles andere sind Details.
unterschied schrieb:
- C hat doch auch Pointer und Referenzen
Zeiger schon, Referenzen nicht.
-
Danke für die Antworten.
-
ich verstehe nicht, was extern in C++ macht.
-
wieso gibt es keine Referenzen? Wenn ich & benutze, dann ist das doch eine Referenz auf "etwas", oder nicht?
-
-
untschied schrieb:
- ich verstehe nicht, was extern in C++ macht.
Dasselbe wie in C. Es ging hier aber um 'extern "C"'. Damit legt man fest, dass ein Name "C-Linkage" hat. Das hat hauptsächlich den Sinn, dass man C-Bibliotheken ansprechen kann. Eine C-Funktion namens foo würde normalerweise dem Linker unter _foo bekannt sein. In C++ gibt es aber Überladung, also mehrere foos, demzufolge codiert der Compiler die Argumenttypen mit in den Namen (Name Mangling), so dass aus foo(int) bspw. foo@i oder etwas in der Art wird. Mit extern "C" erzwingt man die C-Konvention.
- wieso gibt es keine Referenzen? Wenn ich & benutze, dann ist das doch eine Referenz auf "etwas", oder nicht?
int i = 42; int &r = i;
ist in C ein Syntaxfehler.
-
ABER
int i = 23; int *p = &i; //das ist doch eine Referenz oder etwa nicht?
-
Nein.
-
volkard schrieb:
ich erinnere nur mal an die alten nullterminierten strings. heute darf man zwei zeiger nehmen. man braucht nicht mehr im string zu hudeln, wenn man einen tokenizer baut. die ewig-lästigen aufrufe von strlen fallen weg. irgendwie ist das dichter an der maschine (am prozessor) als nullterminierte strings.
wie meinste das? irgendwie muss das ende doch erkannt werden. ob man nun eine 0 ans ende packt oder irgendwo die länge speichert. beides ist 'nah an der maschine'
btw: ein weiterer grund warum c++ auf 'embedded' nicht so beliebt ist, ist dass man dessen erweiterte features kaum einsetzen kann. so'n stl-kram der willkürlich 'new'd' und 'deleted' ist kaum zu gebrauchen auf'nem controller mit z.b. 8k ram. ausser das man variablen irgendwo hinschreiben kann und die bessere typüberprüfung von c++ hat es sonst keine vorteile gegenüber c