c oder doch c++
-
hi, ich weiß heiße Thema.
brauche euere Rat.
habe vor paar Monaten c++ angefangen zu lernen. von Anfang an falsch habe mit mfc angefangen zu dem Zeitpunkt wuste ich nich was mfc ist. mittlerweile kenne ich c++ zu 30 - 40 Prozent. es ist schwierig manche Themen zu verstehen. da ist die Frage ob ich erstmal mit c anfangen soll. oder soll ich weiterhin mit c++ versuchen zu verstehen. ich glaube c ist nicht einfach. und was kann c was c+- nicht kann.
danke.
-
w81 schrieb:
ich glaube c ist nicht einfach.
Klar ist C einfach, die Grundlagen kannste bald an einem Wochenende lernen. (Beherrschen tut man die Sprache danach nicht, aber man kennt zumindest alle Sprachmittel.)
w81 schrieb:
und was kann c was c++ nicht kann.
Hm.. implizite Konvertierung von void* zu T*?
Quasi nichts.PS: Mit 40% biste eigentlich schon ein Guru.

-
Um hier als C++ Experte zu gelten, musst du C können, damit du weißt was man in C++ nicht macht.
-
Wenn du im Endeffekt C++ lernen willst, würde ich dir abraten, C zu lernen!
C unterstützt kein OOP-Konzept, keine generische Programmierung!
C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!Lernst du eigentlich mit einem Buch?
Wenn ja mit welchem?Gruss syntax_error
-
Ja schon mit Bücher und im Internet.
Von Anfang an habe ich mir Buch gekauft von W.Jurgen was auch falsch war.
Paar Bücher aus dem Internet in PDF runter geladen.
Was mich auch nicht weiter brachte weil die waren auch mit Fehlern.
Persönliches Problem ist auch mein Geduld
Mit welchen Büchern haben sie Gelernt ?
-
Vorlesung an der Uni und viel Spielerei mit Visual Studio.^^
-
Syntax_error schrieb:
C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!
Da hab ich aber DEUTLICH anderes gehört.
C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)Edit: Obwohl im Netz leider andere Sachen stehen.
-
w81 schrieb:
Mit welchen Büchern haben sie Gelernt ?
Gut sind Bücher wie der C++-Primer. Thinking in C++ (Vol. 1+2) sind als E-Book erhältlich (kostenlos, selbstverständlich).
-
Hacker schrieb:
Syntax_error schrieb:
C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!
Da hab ich aber DEUTLICH anderes gehört.
C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)Edit: Obwohl im Netz leider andere Sachen stehen.
Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.
-
Ethon schrieb:
Hacker schrieb:
Syntax_error schrieb:
C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!
Da hab ich aber DEUTLICH anderes gehört.
C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)Edit: Obwohl im Netz leider andere Sachen stehen.
Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.
Gut, hast bestimmt Recht. Hier im Forum standen aber andere Sachen, AFAIR. Aber bestimmt von der Abwärtskompabilität gesehen...
Edit: Verwechsele ich vielleicht mit C++/CLI.cooky451 schrieb:
PS: Mit 40% biste eigentlich schon ein Guru.

Längst...
-
Ethon schrieb:
Hacker schrieb:
Syntax_error schrieb:
C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!
Da hab ich aber DEUTLICH anderes gehört.
C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)Edit: Obwohl im Netz leider andere Sachen stehen.
Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.
Ich sehe es auch als zwei völlig verschiedene Programmiersprachen an, und nicht als Erweiterung. Da gabs auch mal eine kleine Diskussion (ich verweise auf die Beiträge von Michael E.) dazu.
-
Wenn du einfach nur auf deinem normalen PC programmieren willst, dann gibt es deutlich bessere Sprachen um in das Thema einzusteigen.
Falls du eine flache Lernkurve bevorzugst, dann sind C und C++ erst natürlich ideal. Wenn du pro Code-Zeile möglichst viele Sonderzeichen bringen willst, dann führt an C++ kein Weg vorbei

Für normale Anwendung macht es eigentlich keinen Sinn C zu lernen. Hast du vor hardwarenah zu programmieren, z.B. für Mikrocontroller oder ein Betriebssystem? Falls ja, dann lohnt sich C schon, aber sonst bist du mit C++ besser bedient (wenn man sich zwischen den beiden entscheiden muss).
Bei einer normalen Software würde ich heutzutage aber definitiv nicht auf C oder C++ setzen, sondern eine richtige Hochsprache verwenden, z.B. Python. Python ist zwar auch nicht perfekt, aber auf jedem Linux inzwischen vorinstalliert. Sobald es performance-kritisch wird kann man den Code in C oder C++ schreiben und super-bequem über SWIG in Python nutzen. Wenn du dagegen mit C++ oder C anfängst, dann hast du nur Ärger, falls du mal eine Skriptsprache einbauen willst, denn dann muss mal gleich den ganzen Interpreter einbetten.
Egal wie du dich entscheidest, tu dir selbst einen Gefallen und lerne noch mindestens eine andere Sprache. Und damit meine ich nicht C, C++, Java oder C#.
-
Ethon schrieb:
Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.
Aber es erfüllt definitiv nicht C99. Die beiden Sprachen gingen unterschiedliche Wege.
-
Syntax_error schrieb:
C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!
War es vielleicht mal vor so 20 Jahren... Die Paradigmen sind so stark auseinander gegangen das zumindest die, die sauberen C++ Code schreiben, nur wenig Überscheidungen mit C finden werden (viel zu wenige um C zu empfehlen, wenn jemand C++ lernen will, zumal er sich dann die C-Paradigmen aneignet, und das Ablegen selbiger fällt manchen schwer).
Nach deiner Erklärung müsste auch C#, C++/CLI usw. C-Ableger sein. Das ist aber nicht so.
Prinzipiell kann man in C++ (nahezu komplett) ein C Programm schreiben, umgekehrt geht dies nicht (oder nur bedingt durch ziemlich aufwändige Nachbauten).
@w81: MFC ist zum Lernen von C++ so ziemlich das schlechteste (ungeachtet davon ob du vielleicht später mit der MFC arbeitest). Die API orientiert sich an einen C++ Stil der schon lange als überholt gilt, und ist eigentlich nur ein [vom Stil veralteter] C++ Wrapper um eine C-API.
Lern die Sprache, die du wirklich lernen willst, und mach darin keine Umwege (und vor allem: Falls es sich um C++ handelt - lass die Oberflächenprogrammierung erst einmal weg, du stellst dir beim Lernen nur selbst ein Bein).
-
@Ethon,
Kompiliere das folgende C89 Programm in C++:#include <stdlib.h> int main(void) { int* arr = malloc(sizeof(int) * 10); free(arr); return 0; }Damit ist bereits schon bewiesen, dass C++ nicht einfach nur eine Erweiterung von C89 ist, sonst müssten alle C89 Programme auch in C++ laufen.
Gibt übrigens noch weitere Unterschiede, wie zum Beispiel die unterschiedliche Bedeutung der folgenden Deklaration:
int foo();In C89 ist das eine Funktion, welche beliebig viele Parameter annehmen kann. Der folgende Code ist somit gültiges C89:
foo(10, "hello", 34.2132f);In C++ wird dies aber nicht kompilieren, da hier die Deklaration bedeutet, dass die Funktion keine Parameter annimmt.
Bereits hier sieht man, dass keine vollständige Kompatibilität vorhanden ist. Von einer reinen Erweiterung kann man daher nicht sprechen. Wenn man dann noch die Konzepte und Ideen hinter den Sprachen ansieht, dann muss man endgültig von zwei unterschiedlichen Sprachen sprechen, welche sich einfach nur in der Syntax sehr ähnlich sind. Bzw. die eine Sprache ist eindeutig aus der anderen entstanden.
Grüssli
-
Dravere schrieb:
In C89 ist das eine Funktion, welche beliebig viele Parameter annehmen kann.
Aber können diese Parameter auch benutzt werden? Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?
-
Hacker schrieb:
Aber können diese Parameter auch benutzt werden?
Ja.
#include <stdio.h> void foo(); int main(void) { foo(10, 3.234, "hello"); return 0; } void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); }Hacker schrieb:
Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?
Wir sprechen hier von Unterschieden, nicht ob irgendwelche Sprachfeatures Sinn machen oder nicht. Sowas ist am Ende nämlich meistens von subjektiver Natur.
Grüssli
-
Dravere schrieb:
Hacker schrieb:
Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?
Wir sprechen hier von Unterschieden, nicht ob irgendwelche Sprachfeatures Sinn machen oder nicht. Sowas ist am Ende nämlich meistens von subjektiver Natur.
Nein, so meinte ich das nicht. Ich glaube, jeder wird mit mir übereinstimmen, dass folgendes "Feature" Schwachsinn wäre:
int foo(); int main() { foo("adf", 5, 7.45);//Man kann nichts mit den Übergabeparametern tun, sie aber trotzdem "übergeben" } int foo(){return 0;}In deinem Beispiel wird die Funktion im bezug auf ihre Parameter redefiniert, was nicht war wie ich es mir Vorstellte.

-
Hacker schrieb:
Nein, so meinte ich das nicht. Ich glaube, jeder wird mit mir übereinstimmen, dass folgendes "Feature" Schwachsinn wäre:
Nein, da wird dir nicht jeder zustimmen. Du denkst da ein wenig zu kurz.
Hacker schrieb:
In deinem Beispiel wird die Funktion im bezug auf ihre Parameter redefiniert, was nicht war wie ich es mir Vorstellte.
Deine Vorstellung ist da anderswo falsch. Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration. Deklaration und Definition sind in C, wie auch in C++, unterschiedliche Dinge.
Wieso du hier zu kurz denkst ist die folgende Situation:
Du kannst hier eine Deklaration haben, aber unterschiedliche Definitionen zum Beispiel für unterschiedliche Plattformen (also durch Makros unterschieden) wobei der Aufruf sich nicht verändert. Zumindest habe ich es so schon in der Verwendung gesehen. Ich finde das zwar auch nicht sehr prickelnd, aber das ist am Ende eben subjektiv.#include <stdio.h> void foo(); int main(void) { foo(10, 3.234, "hello"); return 0; } #ifdef BLUB_UNIX void foo(int x, double d) { printf("%d, %f", x, d); } #else void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); } #endifGrüssli
-
Dravere schrieb:
Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration.
Klar. War auch schlecht umschrieben, nur sind die Übergabeparameter der Deklaration und der Definition unterschiedlich, also...
Dravere schrieb:
Deklaration und Definition sind in C, wie auch in C++, unterschiedliche Dinge.
Das ist Selbstverständlich.
Dravere schrieb:
Du kannst hier eine Deklaration haben, aber unterschiedliche Definitionen zum Beispiel für unterschiedliche Plattformen (also durch Makros unterschieden) wobei der Aufruf sich nicht verändert. Zumindest habe ich es so schon in der Verwendung gesehen. Ich finde das zwar auch nicht sehr prickelnd, aber das ist am Ende eben subjektiv.
#include <stdio.h> void foo(); int main(void) { foo(10, 3.234, "hello"); return 0; } #ifdef BLUB_UNIX void foo(int x, double d) { printf("%d, %f", x, d); } #else void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); } #endifNun, ich verstehe nicht wieso man es nicht so macht:
#include <stdio.h> #ifdef BLUB_LINUX void foo(int, double); #else void foo(int, double, char*); #endif int main(void) { foo(10, 3.234, "hello"); return 0; } #ifdef BLUB_UNIX void foo(int x, double d) { printf("%d, %f", x, d); } #else void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); } #endif
-
Hacker schrieb:
Dravere schrieb:
Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration.
Klar. War auch schlecht umschrieben, nur sind die Übergabeparameter der Deklaration und der Definition unterschiedlich, also...
Also was? Das spielt keine Rolle.
Hacker schrieb:
Nun, ich verstehe nicht wieso man es nicht so macht:
Probier dein Code für
BLUB_UNIXzu kompilieren, nachdem du natürlich den Fehler korrigiert hast. Du hast nämlich einmalBLUB_LINUXund einmalBLUB_UNIX
Jedenfalls es kommt dann der folgende Fehler oder so ähnlich:
error: too many arguments to function 'foo'Grüssli