Thema: C# oder C++ ?
-
05. 12. 2012, 21:59 #1Mitglied
- Registriert seit
- Oct 2011
- Beiträge
- 34
C# oder C++ ?
Hey, ich nutze normalerweise Java, jedoch bin ich zu einem Problem gekommen, welches damit nicht direkt gelöst werden kann.
Also wollte ich mir eben eine neue Sprache aneigenen.
Ich benötige eine Sprache mit welcher ich auf die Windows Funktionen direkt zugreifen kann, sprich die winApi.
Würde vor allem Zugriff auf Speicheraddressen und Netzwerkkommunikation benötigen.
"Darin" asm zu verwenden sollte auch möglich sein.
Da kommt natürlich C++ in Frage.
Nur inzwischen habe ich ein paar Seiten gelesen. laut denen man mit C# wohl auch darauf zugreifen kann.
Also welche Sprache würde sich eignen?
Wenn ich mir jobangebote ansehe wird häufig C# verlangt, für Anwendungsentwickler, also mal ein Pluspunkt :P
C/C++ ist eine LV in der Uni, also da auch ein Plus
.....Oder ganz was anderes.....?
mfg
-
05. 12. 2012, 23:24 #2
Re: C# oder C++ ?
Zuerst einmal: In der Berufswelt kommt es nicht drauf an, welche Werkzeuge du kennst, sondern wie du sie richtig einsetzt. Sprich: Wenn du etwas lösen musst bist du nicht auf Sprache X festgenagelt, sondern kannst auch Y und Z verwenden. Deshalb würde ich da keine großen Entscheidungen anhand der Berufswelt machen.
Zu deiner Frage: Nachdem du mit der WinAPI rumwerkeln willst aber auch Speicher manipulieren möchtest wirst du wohl mit C++ glücklich sein. Du kannst dir ja mal http://www.krucker.ch/skripten-uebun...mmen%20BCB.pdf durchlesen, vl ist das interessant für dich.
-
06. 12. 2012, 21:37 #3Mitglied
(Threadstarter)
- Registriert seit
- Oct 2011
- Beiträge
- 34
Re: C# oder C++ ?
Ja, dass es nicht darum geht möglichst viele Sprachen zu beherrschen ist mir klar. Aber wenn bei einem Arbeitgeber jetzt explizit C# verlangt wird wäre es ja nicht schlecht zu wissen was dort ein extends ist :=)
Aber ich glaube doch, dass es wichtig ist sich bei einer Sprache auszukennen, welche man beruflich benötigt.
-> z.B.: Wenn ich fünf Klassen implementiere um ein Problem zu lösen welches schon lange in der Sprache umgesetzt wurde und ein 2 Zeiler ist (nurn Bsp
)
Okay, danke aber ich muss mir eh zuerst mal die Grundlagen anschauen ala Pointer, Dekonstruktoren, Datentypen, usw...
Also, C++ ist für meine Aufgaben wesentlich besser als C#?
Per Google finde ich halt auch einige Beispiele zum aufruf der Winapi per C#.
-
06. 12. 2012, 21:54 #4
Re: C# oder C++ ?
Nachdem du Speicher manipulieren möchtest wirst du um C++ gar nicht großartig rum kommen, denn AFAIK kann C# nicht direkt auf die einzelnen Speicherstellen zugreifen. Ansonsten kannst du mittels C# die WinAPI ohne Probleme aufrufen - ist sogar wohl einfacher, weil dafür mehr Bibliotheken verfügbar sind als für C++.
-
06. 12. 2012, 22:25 #5
Re: C# oder C++ ?
"extends", nichtmal ein Keyword.C# verlangt wird wäre es ja nicht schlecht zu wissen was dort ein extends ist
Ich hab ja überhaupt keine Ahnung, aber sicher dass du direkt im Speicher schreiben musst?Würde vor allem Zugriff auf Speicheraddressen und Netzwerkkommunikation benötigen.
"Darin" asm zu verwenden sollte auch möglich sein.
-
09. 12. 2012, 13:54 #6
Re: C# oder C++ ?
C++ ist wohl die schweste Programmiersprache nach Assembler - gleichzeitig auch die mächtigste.
Gleichzeitig kann heute C#/Java wirklich jeder, weil es in praktisch jeder Ausbildung die was mit Programmieren zu tun hat, gelehrt wird -> C++ ist heute die meistgefragte Programmiersprache am Arbeitsmarkt.
C++ ist so mächtig weil es quasi seit 20 Jahren Standard ist, deshalb gibt es unzählige Bibliotheken dafür.
Beispiel: Während du in C# nur mit .net GUIs zeichnen kannst, weil das das einzige ist was dir Microsoft eingebaut hat dafür, sieht das in C++ deutlich anders aus.
Dort hast du die Wahl zwischen: MFC, .net, GTK+, QT, ...
Außerdem ist C# auf Windows beschränkt, und das ist der größte Pluspunkt von C++:
Du kannst damit für alle Architekturen entwickeln die es in den letzten 20 Jahren gab...
C# und Java sind außerdem reine high-level-Sprachen.
C++ ist das Grundsätzlich auch, bei Bedarf kannst du aber so weit runter wie du willst, notfalls kannst du sogar inline-Assemblercode schreiben...
Java wählt ja den Ansatz, Code zu schreiben der danach auf jeder Plattform interpretiert werden kann -> Auf jeder Plattform ausführbar, aber langsam.
C# setzt derweilen auf absichtliche Inkompatibilität um das Monopol von Microsoft zu unterstützen.
Wenn du in C++ die richtigen Bibliotheken verwendest, kannst du deinen Code unverändert für jede Platform kompilieren, wo er mit maximaler Geschwindigkeit läuft, nämlich als nativer Maschinencode.
Und der letzte Hinweis: Wenn du C++ beherrscht brauchst du eigentlich nur die C#-Doku zu öffnen und schon kannst du damit arbeiten.
Umgekehrt musst du erstmal die größte Hürde in C++ überwinden: Die Pointerarithmetik.
-
09. 12. 2012, 14:06 #7
Re: C# oder C++ ?
Hab mich schon, dass noch kein FUD kam.
-
30. 12. 2012, 21:54 #8
-
30. 12. 2012, 22:23 #9Mitglied
- Registriert seit
- Feb 2008
- Beiträge
- 904
Re: C# oder C++ ?
In dieser Hinsicht sind Java und C# eigentlich sehr ähnlich. Bei beiden wird Bytecode erzeugt, der zur Laufzeit in einer VM ausgeführt wird. Wobei "C#" hier eigentlich zu eng gefasst ist: Dies ist nur eine von vielen Sprachen, die diesen CIL-Code generiert. Der Unterschied ist "nur", dass Microsoft die Runtime nur fürs eigene Betriebssystem liefert, Java aber überall existiert. Microsoft hat halt kein Interesse an ein der Unterstützung verschiedener Betriebssysteme, wohl aber an unterschiedlichen Architekturen: .NET Programme sollen schließlich daheim auf dem x86 genauso laufen wie unterwegs auf dem ARM-Smartphone/Tablet.
Nichtsdestotrotz kann man .NET-Programme grundsätzlich auch auf anderen Systemen ohne Neukompilierung mit der Mono-Laufzeitumgebung nutzen. "Grundsätzlich" heißt, dass es natürlich keine 100%-Kompatibilität gibt, ist so wie mit WINE...
Zur Frage: C++, wenn du das drauf hast ist C# ein Kinderspiel.
-
01. 01. 2013, 21:48 #10
Re: C# oder C++ ?
Ich sehe keine Beleidigung.//Argument *argument;
if(argument == NULL) insult(&Vorposter);
Das ist Definitionssache, insbesondere die "Mächtigkeit", die ist doch bei allen Turing-Vollständingen Sprachen identisch.C++ ist wohl die schweste Programmiersprache nach Assembler - gleichzeitig auch die mächtigste.
Soll der Pfeil (->) eine Implikation sein?Gleichzeitig kann heute C#/Java wirklich jeder, weil es in praktisch jeder Ausbildung die was mit Programmieren zu tun hat, gelehrt wird -> C++ ist heute die meistgefragte Programmiersprache am Arbeitsmarkt.
Belege/Quellen, dass C++ die meistgefragteste Sprache am Arbeitsmarkt ist?
Deine Defintion von Mächtigekeit ist also das Alter und die Anzahl der Bibliotheken?C++ ist so mächtig weil es quasi seit 20 Jahren Standard ist, deshalb gibt es unzählige Bibliotheken dafür.
So ein Bullshit.Beispiel: Während du in C# nur mit .net GUIs zeichnen kannst, weil das das einzige ist was dir Microsoft eingebaut hat dafür, sieht das in C++ deutlich anders aus.
ort hast du die Wahl zwischen: MFC, .net, GTK+, QT, ...
Es gibt mehrere Gui Frameworks in .net, diese kann man, muss man aber nicht nutzen. Und natürlich sieht es bei C++ anders aus, weil es kein einziges Gui Framework in der Standardlib gibt.
Für .net gibts Bindings für viele bekannten Gui Frameworks, wie QT oder auch GTK, von daher total schwachsinniges Argument.
Wozu sollte man in C++ .net für GUIs nutzen, MFC ist nur ein Wrapper um die Winapi, genau das was auch Windows Forms in .net ist.
Via P/Invoke könnte man auch direkt mit Gtk arbeiten ohne Bindings.
Aber es gibt IMO keinen Grund irgendein anderes GUI Framework unter Windows zu benutzen, WPF ist da schon das beste.
Das ist nicht ganz korrekt.Außerdem ist C# auf Windows beschränkt, und das ist der größte Pluspunkt von C++:
Du kannst damit für alle Architekturen entwickeln die es in den letzten 20 Jahren gab...
C# ist auf .net beschränkt (wobei das auch nicht ganz stimmt), .net ist aber nicht auf Windows beschränkt, es läuft auch auf dem Windows Phone, auf der Xbox und auf anderen Geräten. Aber ja, ist alles von Microsoft.
Ansonsten gibts noch Mono, .net Funktionalität wird damit gut abgedeckt und es läuft unter Linux, Android, Mac, IOS, etc.
Ich behaupte aber mal, dass es relativ wenige Entwickler gibt die für wirklich viele Platformen Software bauen. Die meisten werden sicher nicht mehr als 5 Zielplatformen haben und da reicht auch Java oder ähnliches.
Ich habe ja wenig Ahnung von C++, aber nachdem was ich so gelesen habe ist C++ auch nicht so portabel wie angepriesen.
Zumindest hier ist C# Java vorraus mit unsafe {}.C# und Java sind außerdem reine high-level-Sprachen.
C++ ist das Grundsätzlich auch, bei Bedarf kannst du aber so weit runter wie du willst, notfalls kannst du sogar inline-Assemblercode schreiben...
Inline kann man in Java und C# keinen Bytecode schreiben, aber man kann ihn in beiden Sprachen bzw beiden Frameworks generieren und ausführen.
Nur auf den Platformen auf denen es eine JVM gibt.Java wählt ja den Ansatz, Code zu schreiben der danach auf jeder Plattform interpretiert werden kann -> Auf jeder Plattform ausführbar, aber langsam.
Außerdem wird Bytecode nicht nur interpretiert sondern auch kompiliert. Hotspot ist da recht fortgeschritten und gut.
C# ist ein Standard, CLI, IL, CLR, etc auch.C# setzt derweilen auf absichtliche Inkompatibilität um das Monopol von Microsoft zu unterstützen.
Das meinte ich mit FUD, welche absichtliche Inkompatibilitäten sollen das denn sein? So ein Quatsch.
Wie gesagt ich habe wenig Ahnung von C++ und den ganzen Bibliotheken, aber bei wie vielen ist das der Fall? Bei trivialen Libs ist das bestimmt kein Problem, aber bei komplexeren?Wenn du in C++ die richtigen Bibliotheken verwendest, kannst du deinen Code unverändert für jede Platform kompilieren, wo er mit maximaler Geschwindigkeit läuft, nämlich als nativer Maschinencode.
Aber nicht, dass die Leute dann anfangen C++ in C# zu schreibenUnd der letzte Hinweis: Wenn du C++ beherrscht brauchst du eigentlich nur die C#-Doku zu öffnen und schon kannst du damit arbeiten.
.
Ich dachte die größte Hürde wären Compilererros von TemplatesUmgekehrt musst du erstmal die größte Hürde in C++ überwinden: Die Pointerarithmetik.
-
02. 01. 2013, 00:34 #11
Re: C# oder C++ ?
Pointerarithmetik... Wie niedlich.

TMP-Programme sind deutlich anspruchsvoller als Bit- und Adressen-Gehacke.
>> Ich habe ja wenig Ahnung von C++, aber nachdem was ich so gelesen habe ist C++ auch nicht so portabel wie angepriesen.
Portabler als C# ist es allemal (es kommt immerhin fast an C ran). Es hängt am Ende natürlich von den benutzten Libraries ab. "Standard"-Libraries wie Qt und Boost helfen in 99% der Fälle, Waschmaschinenprogrammierer eingeschlossen.
>> aber bei wie vielen ist das der Fall? Bei trivialen Libs ist das bestimmt kein Problem, aber bei komplexeren?
Was heißt schon trivial? Es gibt auch spezielle Libs für mehrere Plattformen, z.B. Fast Fourier Transform, Grafik-Engines etc. pp.
So, zu dem Thema "C++ ist ja so viel toller als C#" ist alles schon tausend mal gesagt, den TE interessiert's sowieso nicht mehr. Vote4Close
-
02. 01. 2013, 00:59 #12Mitglied
- Registriert seit
- Feb 2008
- Beiträge
- 904
Re: C# oder C++ ?
Bei allen die ordentlich programmiert sind. Heißt:
- Keine Aufrufe Betriebssystem-spezifischer Funktionen
- Berücksichtigung verschiedener Architektur-spezifischer Eigenheiten, z.B. Big Endian/Little Endian
Wobei da ja eigentlich nur das zweite ein wirklicher Unterschied ist.
Soweit gilt das zumindest für den Unterbau eines Programms. Um eine anständige Integration ins Betriebssystem und eine Anpassung an die lokalen Gegebenheiten (=gute GUI) kommt man bei keiner Sprache drumrum, das kann auch Java nicht leisten, da sind die Denkweisen zu unterschiedlich. Natürlich gibt es auch in diesem Bereich Cross-Platform-Bibliotheken, aber beispielsweise ein QT-Programm, was unter Windows ganz passabel aussieht, wird ohne Änderungen unter OSX aussehen, als wäre der Programmierer wahnsinnig geworden.
-
03. 01. 2013, 16:45 #13
Re: C# oder C++ ?
Zumindest sollte sich jeder Bereich abdecken lassen.
QT benutzt ja den MOC, einen "zwischencompiler", und achtet bei Dingen wie Soundausgabe auf Hardwareabstraktion, damit hätten wir schonmal eine gewaltige Bibliothek für irgendwelches GUI-Zeug.
GTK+ kann das angeblich auch, damit habe ich aber nie programmiert.
Mit OpenGL und SDL lässt sich dann noch der ganze Spielebereich abdecken.
Problematisch sind eigentlich nur Libs die direkt auf Systemfunktionen zugreiffen, aber alleine QT deckt schon fast alles ab in dieser Hinsicht.
-
03. 01. 2013, 23:21 #14Mitglied
- Registriert seit
- Jan 2013
- Beiträge
- 2
Re: C# oder C++ ?
Als ob - guck dir mal esoterische Programmiersprachen an.
-
04. 01. 2013, 01:08 #15
-
04. 01. 2013, 01:38 #16
Re: C# oder C++ ?
Aber solche Behauptungen wie "C++ ist die schwerste Sprache" sind trotzdem Blödsinn. Woran macht man denn die Schwierigkeit einer Sprache fest? Ist eine Sprache einfacher, nur weil ich eine GUI zusammenklicken kann, mir dafür aber ein Bein ausreißen muss wenn ich eine Systemfunktion aufrufen will, die ich nicht anklicken kann? Ich kann ja nicht abstreiten dass zum Beispiel die Möglichkeit den Speicher selbst zu verwalten und mit Pointern darauf zuzugreifen auch viele Möglichkeiten mit sich bringt Fehler einzubauen, aber ist dadurch die Sprache an sich schwierig? Man muss in C++ ja nicht andauernd und überall nur Pointer verwenden, Templates wirken auch schwierig, aber können auch einiges vereinfachen.
Die Diskussion ist eigentlich sowieso völlig Unnötig, aber wenn jeder seinen Senf dazugeben muss mach ich das eben auch :P
-
04. 01. 2013, 04:18 #17
Re: C# oder C++ ?
C++ ist nicht direkt schwerer, aber es erfordert ein deutlich fundierteres Verständnis der Funktionsweise eines Prozessors (und natürlich des Compilers selbst!) um es wirklich effizient nutzen zu können.
C#/Java hingegen enthält einem einige besonders mächtige Funktionalitäten gezielt (von "unsafe" in C# abgesehen) vor bzw. abstrahiert diese soweit, dass sie kein Risiko mehr darstellen.
Zudem ist es für .net und Java wesentlich einfacher "vollständige" IDEs anzubieten, da mangels Sprachelementen wie Präprozessoranweisungen oder Makros kein Code existieren kann, der in Abhängigkeit von irgend welchen gesetzten Konstanten mit einem mal nicht einmal mehr semantisch korrekt ist...
Im Endeffekt würde ich C++ nur Leuten empfehlen, die sich wirklich intensiv mit der Funktionsweise von Prozessoren auseinandersetzen wollen, für den "normalen" Anwendungsentwickler der niemals über die Win-API hinaus schauen wird ist C# völlig ausreichend. Die ganze Thematik um Pointerarithmetik, Bitfickerei, Big-/Little-Endian, Byteorder, Wortbreiten, Speichermanagement etc. ist ziemlich umfangreich und muss trotzdem komplett verstanden werden um mit Lowlevelsprachen sinnvoll und fehlerfrei arbeiten zu können.
Zudem ist der Wechsel von Java zu C++ deutlich schwerer als umgekehrt. Der C++-Entwickler versteht grob was die Java-VM intern tut und arbeitet mit Java als sei es nur ein x-beliebiges Framework. Der Java-Entwickler hingegen versteht auf Anhieb erst mal NICHT warum er in C++ alles händisch tun muss was Java für ihn erledigt hat, oder warum Vererbungen mit einem mal nicht mehr trivial sind, oder warum es keine (so umfangreichen) Systembibliotheken mehr gibt. Am schwierigsten ist es allerdings sich an das fehlen des GC zu gewöhnen und zwischen Stack und Heap mit ihren Eigenarten zu unterscheiden (Java kennt keinen Stack und die VM sieht den Betrieb auf Prozessoren ohne einen solchen vor, wenngleich es VMs gibt die den nativen Stack verwenden um die Ausführung signifikant zu beschleunigen! Nicht wenige rekursive Algorithmen lassen sich nicht 1:1 von Java nach C++ übertragen weil zu viel "Müll" auf dem Stack liegt und dessen Größe in C++ begrenzt ist.).
-
04. 01. 2013, 18:06 #18
Re: C# oder C++ ?
@stefbrot
Senf ist was Feines, man kann kaum genug davon krigen.
Eins sollten wir dringend klarstellen: Was heißt eigentlich »C++«? Reden wir von C-Code mit ein bisschen Klassengedöns oder von C++11 mit allem, was da bimmelt, blinkt und glänzt. Das ist entscheidend, denn der Unterschied ist so groß, dass man schon fast von verschiedenen Programmiersprachen sprechen kann.
»C with Classes«, ja, das ist systemnah, lästig und anfällig. »Modernes C++« abstrahiert die hardwarenahe Ebene genauso weg wie die VM-basierten Sprachen. Hey, wenn ich noch weniger über meinen Prozessor wissen muss, dann finde ich den Einschaltknopf nicht mehr.
Ein gutes GUI-Framework dazu, dann tut sich das an Bequemlichkeit und Produktivität alles nichts mehr – egal ob C++, Java oder .NET. Ob es ein Vorteil ist, dass ich mit C++ trotzdem bis aufs einzelne Bit runter kann, wenn denn gewollt und nötig, das hängt vom Projekt ab.
Und wehe, es steinigt mich einer, weil ich ein bisschen überspitzt formuliert hab...
-
04. 01. 2013, 21:25 #19Mitglied
- Registriert seit
- May 2007
- Beiträge
- 173
Re: C# oder C++ ?
Makros sind schlecht? Java hat keine Makros?
In Java gibt es Annotation. Dahinter steckt vllt eine andere Logik. Im Prinzip wird da auch ein Präprozessor aufgerufen der dann je nachdem irgendwelche xml und java Dateien usw. erzeugt werden. Da kann dein Code auch erstmal syntaktisch korrekt sein.
In Java gibt es auch einen Stack. Sonst gäbe es wohl keine rekrusiven Funktionen in Java.
-


Zitieren

mehr lesen...







Irisches Gericht ordnet Löschung...
Gestern, 21:07 in gulli:news