Mit C++ kenntnissen C lernen
-
Steffo schrieb:
Ja, die Sprache ist schnell gelernt, aber selbst im Embedded Bereich hält C++ zunehmend Einzug und da ich mich wahrscheinlich darauf spezialisieren werde, ist das um so ärgerlicher, da C++ im Lehrplan nicht sonderlich relevant sein wird und diese Sprache ist nicht über Nacht gelernt...
Hättest du vor ein paar Jahren noch nach dem Diplomstudiengang studiert, in dem C++ an einigen Hochschulen an der Tagesordnung war, dann hättest du letzten Endes auch nicht mehr gemacht als C in C++.
Ich kann die Abneigung gegen C nicht verstehen, im Gegensatz zu den ganzen OO Sprachen lernt man hier wirklich noch die CPU auf beinahe Assemblerebene zu programmieren, was zu einem tieferen Verständnis der Abläufe führt und auch Raum für manuelle Optimierungen zuläßt.
Aber wahrscheinlich liegt die Abneigung auch einfach daran, daß die Java und C# Generation mit C einfach überfordert ist und bezüglich C++ nur in die OO Ecke flüchtet um dort dann so etwas wie Java/C# in C++ zu machen.Und C ist im µC Bereich noch lange nicht tot, wer C nicht mag, der hat meiner Meinung nach im Embedded Bereich nichts zu suchen.
Der Vorteil von C++ greift erst bei größeren SW Projekten, aber für diese sind gerade die µC zu schwach und das wird sich auch nicht ändern, nur weil man meint, daß die ARM CPUs, die ja aus der µC Ecke kommen, der Maßstab für µC wären. Das sind sie nämlich nicht, nur weil ARM CPUs die Handys und Tablets erobern wird es noch weiterhin µC für Waschmaschinen und Regelungssysteme jeder Art geben und da benutzt man immer noch die kleinen µC, wenn sie dafür ausreichen.
Es wird also auch noch in 10 Jahren µC geben, die nur wenige Bytes als Arbeitsspeicher haben und bei denen es sich noch lohnen kann, einige Algorithmen händisch oder gar in Assembler zu implementieren, aber genau hier ist dann auch C noch eine ausgezeichnete Wahl, wenn man nicht ganz tief in Assembler versinken will.
-
Mit C bin ich bis jetzt nicht überfordert. Immerhin hat es für eine 1,0 in Systemprogrammierung gereicht.
Ich bin auf der Suche nach Praktikas und oft wird da C und C++ im selben Atemzug erwähnt. Du wirst es kaum glauben, aber ich hab kürzlich ein Gespräch mit einem Vertreter eines Automobilzulieferer gehabt, die Autoschlüssel herstellen und gefragt, in welcher Sprache sie ihre Schlüssel programmieren. Ich bekam C/C++ als Antwort. Vereinzelt noch in Assembler, aber er gehe davon aus, dass in 2-3 Jahren nur noch in C/C++ programmiert wird.
C++ bietet zwar hohe Abstraktion an, versucht dies aber eben nicht auf Kosten der Geschwindigkeit zu tun. Es gibt sogar Kernel die in C++ geschrieben wurden. BeOS ist so ein Beispiel. Ja, es ist gestorben, aber nicht weil es in C++ programmiert wurde (), sondern weil es dafür kaum Software gab.
Für C gibt es mehr Compiler und der Code ist oft auch kleiner als C++ Code. Das ist der einzige Grund, weshalb C noch so verbreitet ist. Ansonsten hat es sprachtechnisch nicht wirklich Vorteile gegenüber C++. Es macht zunehmend mehr Sinn C++ anstatt C zu verwenden. Die Compiler werden immer besser und der Speicher ausreichend groß, so dass es kaum noch einen Unterschied macht, ob man C oder C++ Code in den RAM lädt.C ist in meinen Augen einfach nur überbewertet und sollte in neuen Projekten möglichst nicht verwendet werden, außer es gibt verdammt gute Gründe dafür...
-
even 'C' programming can be appreciated by the Real Programmer: after all, there's no type checking, variable names are seven (ten? eight?) characters long, and the added bonus of the Pointer data type is thrown in-- like having the best parts of Fortran and assembly language in one place. (Not to mention some of the more creative uses for #define.)
Mit C kann man viele und auch schmutzige Sachen machen.
Oder hast du schon mal einen Kernel Exploit in C++ gesehen?
-
-
EOP schrieb:
even 'C' programming can be appreciated by the Real Programmer: after all, there's no type checking, variable names are seven (ten? eight?) characters long, and the added bonus of the Pointer data type is thrown in-- like having the best parts of Fortran and assembly language in one place. (Not to mention some of the more creative uses for #define.)
Mit C kann man viele und auch schmutzige Sachen machen.
Oder hast du schon mal einen Kernel Exploit in C++ gesehen?C ist ein Subset von C++, ergo geht da auch alles, auch wenn man demn Compiler geringfügig mehr in den Hintern treten muss, wenn man gerne schwachsinnigen Output möchte.
-
C rulez schrieb:
Der Vorteil von C++ greift erst bei größeren SW Projekten,
Wo ziehst du denn da die Grenze? Also, ab wann ist ein Projekt "größer"?
-
C rulez schrieb:
Ich kann die Abneigung gegen C nicht verstehen, im Gegensatz zu den ganzen OO Sprachen lernt man hier wirklich noch die CPU auf beinahe Assemblerebene zu programmieren, was zu einem tieferen Verständnis der Abläufe führt und auch Raum für manuelle Optimierungen zuläßt.
Nur weil man mit Zeigern in einem linearen Speichermodell rumfrikelt, kriegt man nicht ansatzweise mit, was das Betriebssystem und v.a. die CPU tatsächlich tun.
Das Argument des tiefen Verständnisses ist auf Assemblerebene schon lange nicht mehr haltbar, bei C ist es einfach nur dumm.C rulez schrieb:
Aber wahrscheinlich liegt die Abneigung auch einfach daran, daß die Java und C# Generation mit C einfach überfordert ist und bezüglich C++ nur in die OO Ecke flüchtet um dort dann so etwas wie Java/C# in C++ zu machen.
Funktionen, Zeiger, Strukturen, Kontrollflussanweisungen. Das wars.
C ist trivial gegenüber C++, Java und C#.
-
nomen est omen et suum quique ad compiler.
op platt: wat den eenen sien uhl is den annern sien nachtigall!Der Fragesteller hatte klar gesagt, er kommt von C++ und möchte für einige Dinge mehr Verständnis von C haben. Der Grund war, die WinApi und anderes bieten eben eine reine C-Schnittstelle - und kommen damit gut aus. Was soll nun wieder der Murks mit einer religiös anmutenden Diskussion über C, C++, C#, Java, usw.?
-
berniebutt schrieb:
Der Fragesteller hatte klar gesagt, er kommt von C++ und möchte für einige Dinge mehr Verständnis von C haben. Der Grund war, die WinApi und anderes bieten eben eine reine C-Schnittstelle - und kommen damit gut aus. Was soll nun wieder der Murks mit einer religiös anmutenden Diskussion über C, C++, C#, Java, usw.?
Das ist ein automatischer Forenbot, der auf die Stichworte C, C++, Java und C# reagiert, wenn zwei oder mehr davon in einem Beitrag erscheinen. Dann wird automatisch ein (höchstwahrscheinlich völlig unpassender, aber das ist dann egal) Beitrag generiert, der einen Sprachflamewar provoziert. Dies verursacht dann auf virale Weise mehr Beiträge von echten Usern und hilft so, den Umfang, und somit die Bedeutung, des Forums zu erhöhen.
-
einige Algorithmen händisch oder gar in Assembler zu implementieren
Welche Algorithmen laufen denn so auf Mikrokontroller. Sind sie eher einfacher oder komplexer Natur? Also Sortieren/Suchen vs. neuronale Netze ...
-
SeppJ schrieb:
[Das ist ein automatischer Forenbot, ...
Ist der von der Sirius Cybernetics Corporation?
Es ist ja alles so deprimierend.
-
SeppJ schrieb:
Dies verursacht dann auf virale Weise mehr Beiträge von echten Usern und hilft so, den Umfang, und somit die Bedeutung, des Forums zu erhöhen.
-
SeppJ schrieb:
Dies verursacht dann auf virale Weise ...
Igitt, jetzt auch noch Viren hier im Forum?
Zurück zum Thema: Beschaffe dir ein paar simple C-Beispiele zum Ansehen. Statt OOP findest du in der Tat meist nur einfaches, was dir aber bekannt sein sollte.
Statt Klassen findest du Strukturen, die nur Daten und keine Methoden kennen. Es wird in C allerdings oft Gebrauch von Zeigern und Adressen gemacht, was man verstehen sollte. Aber die WinApi ersetzt vieles durch Makros wie LPTSTR und ähnliches. Du kannst deine Programme wie gewohnt in C++ schreiben und nur die Schnittstellen zu C-Bibliotheken C-konform aufrufen. So schwer ist das nicht!