Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

19.01.2013, 18:45

C war die Basis auf der C++ entwickelt wurde (hence the name). ;)

Wenn du C++ kannst, kannst du praktisch auch schon C. Im Prinzip gilt es dann nur rauszufinden, welchen Einschränkungen du dich unterwerfen musst, damit dein C++ Code auch als C Code durchgeht und das wars...

Disclaimer: Ja, mir ist bewusst, dass das eine sehr vereinfachte und streng genommen heutzutage nicht mehr ganz korrekte Sichtweise ist. Aber das ist imo alles, was unser Threadersteller zu diesem Thema im Moment wissen muss.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (19.01.2013, 18:54)


SchlafMatze

Frischling

Beiträge: 5

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

12

19.01.2013, 19:00

Wenn du C++ kannst, kannst du praktisch auch schon C. Im Prinzip gilt es dann nur rauszufinden, welchen Einschränkungen du dich unterwerfen musst, damit dein C++ Code auch als C Code durchgeht und das wars...


Ich kann mich da dot nur anschließen. Habe mit der Programmierung in C++ angefangen, muss nun aber an der Uni mit C arbeiten. Anfangs wundert man sich evtl. über den ein oder anderen Fehler, den der Compiler auswirft, ich konnte mich jedoch schnell an die Einschränkungen gewöhnen und seitdem läuft es i.d.R. ganz gut :)

FSA

Community-Fossil

  • Private Nachricht senden

13

19.01.2013, 20:58

Zitat von »LetsGo«

Wer C++ kann, kann auch C Programmiern.

Muss ich protestieren. Wenn jemand _nur_ C++ kann (strings und solche Sonderfälle), wird er mit C massive Schwierigkeiten bekommen. Nur weil die Sprachen fast gleich heißen, muss man sie nicht beide können wenn man die eine kann.

Es hat ja auch kein Grüner-Berg die Titanic zum sinken gebracht sonder ein Eis-Berg ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

14

19.01.2013, 20:59

Wenn man eine kostenlose Alternative nehmen würde, wäre das hier von GalileoComputing gut/ausreichend?
http://openbook.galileocomputing.de/c_von_a_bis_z/
Wie gesagt, Vorkenntnisse sind ja bereits durch LUA vorhanden.

Falls das aber wirklich zu "schlecht" sein sollte, dann hole ich mir das Buch ;)

Tobiking

1x Rätselkönig

  • Private Nachricht senden

15

19.01.2013, 21:07

Ich würde davon abraten C++ zu lernen, wenn man eigentlich C können möchte. Vieles was als gutes C++ gilt (Verwendung der STL, Vermeidung manueller Speicherverwaltung z.B. durch RAII, std::string statt C-String ...) basiert auf Features, die es in C nicht gibt. Wenn man ordentliches C++ lernt, kann man hinterher nicht zwangsläufig auch C. Wenn man C++ als C mit Klassen lernt, kann man auch direkt C lernen. Ein Buch bringt einem neben der Programmiersprache oft auch einen Grundsatz an Paradigmen bei, die bei einem C Buch dann entsprechend passender sind. Ich habe es zwar nicht selbst gelesen, aber oft wird das Buch http://www.amazon.de/Programming-Languag…e/dp/0131103628 von den C-Erfindern empfohlen.

Das bei Mikrocontrollern C++ nicht so weit verbreitet ist, liegt neben dem Compiler auch noch an der Laufzeit- und Standardbibliothek. Selbst wenn optionale Funktionalität wie RTTI und Exceptions deaktiviert werden, benötigt C++ etwas an Laufzeitunterstützung. Ich habe die letzten Tage erst wieder damit gekämpft C++ auf einem ARM System zum Laufen zu kriegen. Zudem ist auf einem nackten System keine STL verfügbar. In diesem Fall macht es meistens wenig Sinn auf C++ zu setzen. Läuft auf dem Mikrocontroller aber eh schon ein minimales Linux mit kompletter Standardbibliothek, wird natürlich auch C++ eingesetzt. Da ist aber selbst Java nicht mehr so unüblich.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

19.01.2013, 22:04

Zitat von »LetsGo«

Wer C++ kann, kann auch C Programmiern.

Muss ich protestieren. Wenn jemand _nur_ C++ kann (strings und solche Sonderfälle), wird er mit C massive Schwierigkeiten bekommen. Nur weil die Sprachen fast gleich heißen, muss man sie nicht beide können wenn man die eine kann.

Wie gesagt, C ist in erster Näherung eine Teilmenge von C++. Wer C++ also beherrscht, beherrscht automatisch auch den Teil, den C++ sicht mit C teilt. Wer diesen nicht beherrscht, beherrscht C++ nicht. Insbesondere das Beispiel mit strings...du wirst mir sicher nicht erzählen wollen, dass jemand, der mit Arrays nicht umgehen kann, C++ beherrscht!? ;)

Wenn man eine kostenlose Alternative nehmen würde, wäre das hier von GalileoComputing gut/ausreichend?
http://openbook.galileocomputing.de/c_von_a_bis_z/

Ich habe keines seiner Bücher gelesen, aber nach allem was man so hört, ist von Büchern dieses Autors und insbesonderen den "A bis Z" Büchern stark abzuraten: http://www.c-plusplus.de/forum/272350-full

Das bei Mikrocontrollern C++ nicht so weit verbreitet ist, liegt neben dem Compiler auch noch an der Laufzeit- und Standardbibliothek. Selbst wenn optionale Funktionalität wie RTTI und Exceptions deaktiviert werden, benötigt C++ etwas an Laufzeitunterstützung. Ich habe die letzten Tage erst wieder damit gekämpft C++ auf einem ARM System zum Laufen zu kriegen.

Hm, was war da konkret das Problem? Ohne RTTI und Exceptions sollte der nötige Laufzeitsupport doch wirklich minimal sein. Mit: operator new und delete, einem pure virtual function call stub, evtl. Locking für lokale statische Variablen und möglicherweise Konstruktor/Destruktor Aufrufen für globale Variablen (je nach Compiler und Plattform macht das evtl. schon der OS Loader) sollte man doch schon praktisch alles abgedeckt haben? Zumindest kann ich mich nicht erinnern, jemals mehr gebraucht zu haben. In Anbetracht der massiven Vorteile eine imo wirklich kaum nennenswerte Investition, vermutlich weniger als 10 simple Funktionen zu schreiben (wir reden hier wohl großteils von 1-5 Zeilern, der vermutlich größte Aufwand ist, rauszufinden welche Funktionen genau benötig werden). Und selbst wenn ich auf new/delete, virtuelle Methoden und globale und lokale statische Variablen von benutzerdefiniertem Typ komplett verzichten müsste, bietet mir C++ mir immer noch soviel mehr, dass ich nichtmal einen Moment drüber nachdenken würde, mich auf C zu beschränken, wenn C++ eine realistische Möglichkeit wäre...

Zudem ist auf einem nackten System keine STL verfügbar. In diesem Fall macht es meistens wenig Sinn auf C++ zu setzen.

Also wenn C++ nur aus der STL bestehen würde, dann klar. Glücklicherweise ist das aber nicht so. Auf einem nackten System ist außerdem auch keine C Standard Library verfügbar. ;) Abgesehen davon machen Dinge wie Templates, Overloading const, inline und namespaces allein die Sprache imo soviel nützlicher, dass ich niemals rohes C anfassen würde, wenn C++ eine Option ist. Von RAII gar nicht erst zu sprechen...

Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von »dot« (19.01.2013, 22:33)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

19.01.2013, 22:45

dot, da du nun so fleißig am Offtopic beteiligt warst, möchtest Du die Debatte nicht vielleicht abspalten? ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

stef

Treue Seele

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

18

19.01.2013, 23:19

Was genau willst du denn für microC programmieren ?
Wenn es sich um einen kleinen 8Bitter handelt hat sich das mit C++ erledigt.
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

19

20.01.2013, 00:52

@dot
Ich habe gerade ein Deja-vu. Die Diskussion hatten wir glaube ich schonmal. Ich meine dir damals sogar schon Recht gegeben zu haben. Du hast natürlich Recht, der Umfang der zu implementierenden Funktionen hält sich im Allgemeinen in Grenzen. Die Probleme auf die ich im Bezug auf ARM getroffen bin, waren eher von der Toolchain bzw. der ARM Architektur verursacht. Wenn für globale Objekte keine Konstruktoren erzeugt werden bzw. in anderer Form als man es bei x86 gewöhnt ist, steht man da erstmal blöd da. :P

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

20.01.2013, 02:53

Hat mich nur interessiert, da ich mit ARM selbst keine Erfahrung hab, ob es da evtl. irgendwelche Besonderheiten gibt. Wenn die verfügbare Toolchain totaler Mist ist, dann ist C++ natürlich nicht unbedingt eine sinnvolle Option. Ich sage nur, wenn es für alle (!) Zielplattformen einen ordentlichen C++ Compiler gibt, dann seh ich in der Regel keinen rationalen Grund, C zu verwenden. ;)

Um zur eigentlichen Diskussion zurückzukommen: Ich (und wie es aussieht andere auch) hab einfach die persönliche Erfahrung gemacht, dass es eine Sache von Minuten ist, sich in C zurechtzufinden, wenn man C++ kann. Abgesehen davon empfinde ich die Tatsache, dass C++ (im Gegensatz zu C)* viele verschiedene Programmierstile unterstützt als außerordentlich wertvoll, was die Denkweise betrifft, zu der die Verwendung der Sprache einen erzieht.
Ich hab selbst keine direkte Erfahrung mit Mikrocontrollern, aber ich würde davon ausgehen, dass die Entwicklung für derartige Plattformen allein durch die Natur der Sache bedingt einen Lernenden mit technischen Details konfrontiert, die einen schnell überfordern können, wenn man gleichzeitig eigentlich noch dabei ist, erst einmal überhaupt die Sprache zu lernen. Allein die Tatsache, dass die Software nicht auf der Maschine läuft, auf der man entwickelt, macht die Sache für einen Anfänger imo nur unnötig kompliziert. Cross Compiling und Remote Debugging usw. sind imo Dinge, mit denen man sich besser dann beschäftigt, wenn man über den Sinn von Funktionen, das Konzept eines Pointers oder gar die Syntax einer for-Schleife nichtmehr nachdenken muss. Aber bis dahin sind es nur Hindernisse, die einem die Sicht aufs Wesentliche versperren; C bzw. C++ ist für sich allein schon komplex genug. Daher meine klare Empfehlung, erstmal auf dem PC in einer angenehmen Umgebung ordentlich C++ zu lernen. Das dabei erworbene Wissen kannst du dann später natürlich in der µC Programmierung anwenden.


*Ich weiß, dass ein Programmierstil etwas sprachunabhängiges ist und mit "unterstützt" meine ich natürlich, dass die Sprache gewisse Arten sich auszudrücken nicht unnötig schwer macht und nicht, dass es in anderen Sprachen ganz und gar unmöglich ist, gewisse Dinge auszudrücken.

@BlueCobold: Ich hab auch schon drüber nachgedacht, abzuspalten, aber ich find, die Diskussion war und ist noch nicht so weit vom Thema abgekommen, als dass nicht noch was für das eigentliche Thema relevantes dabei rauskommen könnte, immerhin geht es ja um die Frage, welche Sprache man lernen sollte, wenn man später mal für µC entwickeln möchte. Die eigentlich fast vorprogrammierte Performancediskussion konntest du ja zum Glück noch abwenden... ;)

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (20.01.2013, 03:09)


Werbeanzeige