ANSI-C und ANSI-C++
-
Hi Leute
ich wollt mal wissen was der unterschied zwischen ANSI-C und ANSI-C++ ist oder gibt es keinen?
Albert
-
Das sind zwei grundverschiedene Sprachen.
-
Ja sind eigentlich schon verschieden. Was aber nichts dran ändert, dass man als C++ Programmierer trotzdem auch das C Zeugs beherrschen muss, da man doch meistens damit konfrontiert wird.
Laut C Standard geht z.B. folgendes:int n; scanf("%d",&n); char myArray[n];Da war ich auch ziemlich überrascht als ich das mal gesehen hatte, und konnte das erst gar nicht glauben... Wird IMHO allerdings auch nur von wenigen Compilern unterstützt
-
mit java passiert dir sowas nicht
-
nep schrieb:
Ja sind eigentlich schon verschieden. Was aber nichts dran ändert, dass man als C++ Programmierer trotzdem auch das C Zeugs beherrschen muss, da man doch meistens damit konfrontiert wird.
Laut C Standard geht z.B. folgendes:int n; scanf("%d",&n); char myArray[n];Da war ich auch ziemlich überrascht als ich das mal gesehen hatte, und konnte das erst gar nicht glauben... Wird IMHO allerdings auch nur von wenigen Compilern unterstützt
Das ist C welches neuer ist als der C++-Standard und somit garnicht in C++ geht. Das was du machst, ist kein gültiges C++. Also wird das auch von keinem C++-Compiler unterstützt. Wenn dann nur von C-Compilern, die den aktuellen C-Standard umsetzen.
Was beweist: C != C++
-
Äh genau das wollte ich doch damit sagen

-
Hem, dann widerspricht dein restliches Posting deinem ersten Satz:
Ja sind eigentlich schon verschieden. Was aber nichts dran ändert, dass man als C++ Programmierer trotzdem auch das C Zeugs beherrschen muss, da man doch meistens damit konfrontiert wird.
Wie kann ich mit aktuellem C-Code in einem gültigen C++-Programm konfrontiert werden?
Ich pers. habe in C++ Libraries und Programmen noch nie aktuellen C-Code gesehen, der vom C++-Standard nicht verstanden wird. Habe auch den passenden Compiler dazu garnicht, wie die meisten C++-Programmierer.
Oder du solltest deine Gewichtungswahl ändern. Von muß, nach evtl. in 0,00001% der Fälle. Und von meistens, nach selten.

-
Artchi schrieb:
Hem, dann widerspricht dein restliches Posting deinem ersten Satz:
passiert hier vielen
-
Naja das Codebeispiel sollte nur ein Beispiel dafür sein, dass es auch in C Sachen gibt, die es so in C++ gar nicht gibt, obwohl es ja immer heißt, dass C eine Untermenge von C++ darstellt. Sollte also nicht heißen, dass man damit in C++ Programmen konfrontiert wird. Hätte ich vielleicht besser abgrenzen sollen.
Und mein erster Satz war so gemeint, dass man als C++ Programmierer z.B. gar keine char-Arrays als Strings benötigt (gibt ja std::string), aber trotzdem oft damit konfrontiert wird, und sich da z.B. dann trotzdem auskennen sollte.
-
nep schrieb:
Laut C Standard geht z.B. folgendes:
int n; scanf("%d",&n); char myArray[n];in c++ kannst ja einfach 'new' dafür nehmen.
oder in der STL gibbets, glaub ich, ein 'valarray' template...
-
ten schrieb:
nep schrieb:
Laut C Standard geht z.B. folgendes:
int n; scanf("%d",&n); char myArray[n];in c++ kannst ja einfach 'new' dafür nehmen.
Und? Das ist ein großer Unterschied.
-
nep schrieb:
ten schrieb:
nep schrieb:
Laut C Standard geht z.B. folgendes:
int n; scanf("%d",&n); char myArray[n];in c++ kannst ja einfach 'new' dafür nehmen.
Das ist ein großer Unterschied.
wieso?
weil man delete[] bemühen muss?
-
Artchi schrieb:
Also wird das auch von keinem C++-Compiler unterstützt.
Der g++ frisst es. Man kann es ihm aber auch abgewöhnen.
-
VLAs haben mit Speicherverwaltung a la malloc/new/Container eigentlich recht wenig zu tun. Sie sind mehr ein portabler Ersatz von man: alloca().
-
@ten:
C++: new -> C: malloc
C++: delete -> C: freemyArray[n] ist einfach noch einmal etwas anderes. Stichworte Stack, Heap und auch sizeof.
Nebenbei:
http://david.tribble.com/text/cdiffs.htm#C99-vs-CPP98
-
C : --> array
C++ : --> vector
-
THX 1138 schrieb:
C : --> array
C++ : --> vectorDas kann man so auch wieder nicht sagen. Zum einen ist das Array "besser" in die Sprache integriert:
void foo(int n) { char array[n]; printf("%d\n", sizeof(array)); }So gibt foo(3) eben 3 und foo(10) eben 10 aus. Wichtiger ist aber vielleicht noch der Unterschied, dass ein solches Array in C zwar eine variable Länge hat, anders als der C++ vector aber trotzdem statisch ist. Denn ist die Anzahl der Felder n des Arrays einmal festgelegt, dann steht sie für den gesamten Block fest und kann nicht mehr verändert werden. Es kann nicht wie beim vector etwas hinzugefügt oder weggenommen werden.
-
TactX schrieb:
VLAs haben mit Speicherverwaltung a la malloc/new/Container eigentlich recht wenig zu tun. Sie sind mehr ein portabler Ersatz von man: alloca().
vla und 'alloca' sind aber beide mit vorsicht zu geniessen. buffer overflows sind damit vorprogrammiert.
ich hab vla noch nie verwendet. viele compiler kennen das auch gar nicht.
-
ten schrieb:
vla und 'alloca' sind aber beide mit vorsicht zu geniessen. buffer overflows sind damit vorprogrammiert.
Gibt es in dem Punkt bei variablen Arrays deiner Meinung nach einen Unterschied zu "normalen" Arrays?
Der GCC unterstützt übrigens die meisten C99-Features inklusive VLAs.
-
minhen schrieb:
Der GCC unterstützt übrigens die meisten C99-Features inklusive VLAs.
Ihr tut hier so als wäre das was ausergewöhnliches?
Natürlich unterstütz der GCC das, ist ja auch ein C Compiler.
Und wie die meisten Compiler hat auch der GCC Sprach-Erweiterungen.
-
lolz schrieb:
minhen schrieb:
Der GCC unterstützt übrigens die meisten C99-Features inklusive VLAs.
Ihr tut hier so als wäre das was ausergewöhnliches?
Weil es nicht selbstverständlich ist. Was ist mit den MS-und Borland-Compilern? Unterstützen die C99? Und dann noch die ganzen Compiler für Controller? Da sieht es eher mau aus. Das einzige was C-Compiler heutzutage durchgängig aus C99 können ist //.