C Möglichkeiten mit C

CLehrling

Cadet 1st Year
Registriert
Juni 2016
Beiträge
9
Ich bin gerade dabei C zu lernen, bis jetzt kann ich nicht viel, aber das ist jetzt nicht wichtig. Meine Frage:
Was kann man mit C alles "anstellen"?
 
Einfache Antwort: Eigentlich alles^^

PS: Ne mal im erst ich würde erstmal mit einfachen Konsolenanwendungen anfangen. Später kannst du dann, je nach Interesse, kleine grafische Benutzeroberfläche (GUI) bauen oder auch einen Mikrocontroller (z.B. Atmel AVR) programmieren.
 
Zuletzt bearbeitet:
Mit C ist schon recht viel möglich. Wird nur recht schnell recht aufwendig, was mit anderen Sprachen einfacher ginge. Heute wird C meist für kleine Microcontroller verwendet.
 
Also ich antworte mal sehr spitz: C kann erstmal vieles. Villeicht sogar alles, was es an Programmiermöglichkeiten geben kann. Die Frage ist nur, wie komplex willst du werden? Ein einfaches "Hallo Welt!" oder einen neuen PHP-Interpreter oder gar einen Treiber für deine Grafikkarte?
 
C ist oftmals Overkill, ähnlich Assembler. Assembler kann heute keiner mehr – Schade eigentlich. Besser geeignet ist C#. C# behebt sehr viele C-Schwächen (Garbage Collection, um nur eine C-Schwäche zu nennen)!
 
Dafür braucht C# immer .NET. Was man für sehr Hardwarenahe Software (wie die erwähnten Microcontroller) nicht immer zu Verfügung hat. Weil es extra Ressourcen benötigt. Und nicht für jede Plattform zu Verfügung steht.
 
ella_one schrieb:
Assembler kann heute keiner mehr
Ich schon und ich denke mal eine ganze Menge die Info studiert haben auch.

Und wenn man einem C-Lernenden schon eine andere Sprache nahe legt, dann doch wohl eher C++ und nicht nicht C#. :)
 
S.Kara schrieb:
Ich schon und ich denke mal eine ganze Menge die Info studiert haben auch.

Es ist ein weit verbreiteter Irrtum, dass ein Informatikstudium etwas mit Programmieren zu tun hat. FHs konzentrieren sich sehr häufig auf Praxis anstatt Forschung/Theorie, da ist die Wahrscheinlichkeit sicher größer, viel Programmierung o.Ä. im Studium zu haben. Generell wird Programmierung an Universitäten aber eher stiefmütterlich behandelt. Bei meiner Uni z.B. hatte ich nur 2 Pflichtmodule bzgl. Programmierung im ganzen Studium - 12 ECTS, also weniger, als ein halbes Semester von der Quantität her.

Assembler habe ich z.B. auch nur im ersten Semester mal interessehalber reingeschnuppert, da gab es was im Wahlbereich. Fand ich aber schnell recht...lästig^^

Ein paar Vertiefungsmodule in OOP und funktionaler Programmeriung habe ich auch nur im Wahlbereich noch mitgenommen. Der mit Abstand größte Teil meines Studium waren aber Algorithmik und Mathematik. Selbst fernab der Algorithmik gab es mehr theoretische Informatik, wie etwa Automatentheorie, Logiken u.Ä. als Programmierung.

However: Die Wahl deiner (Lern)Sprache hängt definitiv stark von deinem Anwendungsgebiet ab. Ich bin z.B. größtenteils in Forschungsbereichen aktiv, besonders Machine Learning und Artificial Intelligence. Vormals also C++, hauptsächlich - besonders jetzt fast nur noch - aber Python.

OOP habe ich mit Java gelernt, für OOP gibt es imho auch nichts besseres als Java. Funktionale Programmierung mit Scheme/Racket und ein wenig Haskell.

C habe mich zum Basteln mit ODROIDs und Raspberry PIs nur mal Hobbymäßig gemacht, auch schon wieder lange her - war für mich auch nicht besonders interessant.
Wenn du allerdings in der Tat in die Richtung von z.B. Microcontrollerprogrammierung möchtest, dann gibt es sicherlich nichts besseres als C.
 
ascer schrieb:
Wenn du allerdings in der Tat in die Richtung von z.B. Microcontrollerprogrammierung möchtest, dann gibt es sicherlich nichts besseres als C.

Kannst du genau so gut auch mit C++ machen, vorausgesetzt, für die Platform gibt es einen halbwegs gescheiten C++-Kompiler.
 
@antred: naja, zum Einen wüsste ich nicht, warum Lambdas, Templates oder OOP für Microcontroller interessant sein sollten? Zum anderen scheitert es doch häufig genau daran?! Microcontroller interessieren mich persönlich überhaupt nicht, insofern kenne ich mich da auch weniger aus. Nichtsdestoweniger weiß ich aber beispielsweise von unseren Robotik-Hardware-Leuten, dass es z.B. für viele der Motor-Controller, die dort zum Einsatz kommen, nur C-Lösungen gibt.
 
@CLehrling: Theoretisch kannst du mit C alles machen, was du willst. Insbesondere, da es für fast alle Aufgaben irgendwo ne passende Bibliothek gibt und ich denke jeder, der von sich behauptet programmieren zu können sollte zumindest rudimentäre C-Kenntnisse besitzen.

Praktisch eignet es sich primär für HW-nahe Programmierung (Betriebssystemkerne, Treiber, Mikrocontroller) weil es einem
a) erlaubt sehr genau zu bestimmen, was wann auf der Maschine passiert,
b) es einem fast vollständigen zugriff auf die HW gewährt (für ein paar Dinge braucht man immer noch Assembler) und
c) praktisch keinerlei Laufzeitumgebung erfordert. Es ist also sehr leicht ein C Programm auf einer beliebigen HW ohne Betriebssystem zum laufen zu bringen.

Andere Sprachen bieten aber einfach wesentlich mehr Abstraktionsmöglichkeiten, durch die man sich nicht ständig um irgendwelchen Low-Level Details kümmern muss und letztendlich die nötige Menge an Code reduzieren. Das erhöht i.d.R. die Produktivität und führt zu weniger Fehlern. Tendenziell würde ich eher mit C# oder Python anfangen.

@ascer: Gerade templates sind auf MCs sehr praktisch, weil sie es erlauben generischen Code und Abstraktionslayer zu schreiben, die keinen Laufzeitoverhead haben aber typensicher sind (im Gegensatz zu den allzeit präsenten C-Macros). Der Nachteil ist meiner Meinung nach, dass es wesentlich einfacher ist "aus versehen" ineffizienten Code zu schreiben.
Aber man muss auch ganz realistisch sehen, dass viele Mikrocontroller heutzutage mehr Leistung haben als mancher PC in den frühen 90ern. Man kommt immer seltener in Situationen, in denen es wirklich auf jedes Byte und jeden Cycle ankommt (dort wo es das tut kann ich mit C++ aber genauso effizienten Code schreiben wie mit C).
 
antred schrieb:
Kannst du genau so gut auch mit C++ machen, vorausgesetzt, für die Platform gibt es einen halbwegs gescheiten C++-Kompiler.

Wenn Mikrocontroller ein Thema sind oder werden: Erstmal reines C, ganz einfach.

Und um einen Beitrag zum etwas seltsamen Thema zu liefern: C ist halt die Hochsprache, die am nächsten an der Hardware ist (z. B. direkter Zugriff auf Hardwareregister). Noch näher an der Hardware ist man dann nur noch mit Assembler.

Grundsätzlich hat C natürlich einige Schwächen, von daher wäre die Frage eher, was C nicht kann :)
 
feynman schrieb:
Wenn Mikrocontroller ein Thema sind oder werden: Erstmal reines C, ganz einfach.

Ich versichere dir, dass auch auf diesem Gebiet gelegentlich C++ zum Einsatz kommt (z.B. in meinem letzten Job).
 
The Ripper schrieb:
​Eigentlich ist der Garbage Collector ne Schwäche von C# ;)

Ich behaupte mal: "kommt drauf an". Wenn man hardwarenah alles kontrollieren will ist er im Weg. Wenn es um Business-Logik geht die möglichst sicher und korrekt implementiert werden will stört es nur wenn man sich um so "Kleinigkeiten" auch noch kümmern muss. Hängt also vom Anwendungsfall ab.

Aber zum Thema: mit C kann man alles Anstellen, sogar ein Betriebssystem programmieren, denn die meisten sind in C geschrieben.
 
antred schrieb:
Ich versichere dir, dass auch auf diesem Gebiet gelegentlich C++ zum Einsatz kommt (z.B. in meinem letzten Job).
Das brauchst du mir nicht erklären, komme selber aus der Branche ;). Aber es wird zu 90% reines C verwendet. Deswegen macht es anfangs keinen Sinn direkt mit C++ anzufangen, wenn man in den embeddded Bereich will. C++ kann man später immernoch in seinen Werkzeugkasten packen.
 
Jesterfox schrieb:
Ich behaupte mal: "kommt drauf an". Wenn man hardwarenah alles kontrollieren will ist er im Weg. Wenn es um Business-Logik geht die möglichst sicher und korrekt implementiert werden will stört es nur wenn man sich um so "Kleinigkeiten" auch noch kümmern muss. Hängt also vom Anwendungsfall ab.

Auch ohne GC mußt du dich aber nicht nötigerweise um solche Kleinigkeiten kümmern. RAII macht's möglich.
 
Hallo,
Ich bin ein bisschen spät aber ich denke das konnte dir helfen.
- Das unterschiede zwischen C on C++ ist die logisch du nutzest um eine Applikation zubauen. Im C du denkst linear, eine Aufgabe nach denn andere. In C++ du denkst Objects (Daten +Funktion), was kommt rein und raus. Am Ende schreibest du wie die Objekts zusammen arbeiten. Aber linear brauche das nicht zu seine, OOL (Object Oriented Language) sind Freunde auf „callback“ und einer paar auf ihre Mechanismus brauch man gar nicht zu schreiben, es geht allein.
- In C du schreibest C Code, in C++ du kannst C-like code schreiben oder echt Objekt code schreiben. Viele Personen schreiben C-like code in C++, und manisch mal ist das alles was du brauchest. C++ Objekt code ist abstrakt und braucht viele training.
- Es gibt ein alter Krieg zwischen C und C++ Entwickler. Bla bla bla -> 20 Jahre später -> bla bla bla :D
- In C du hast viele Freiheit, und natürlich viele Freiheit um dummen Dinger zu machen. Ein expert ist der der gelernt hatte sich diese Freiheit zu begrenzen und eine strengte Disziplin
- Auf ein komplexe Project ein C expert wird eine C-object-like code schreiben Veil er brauchte: Abstraktion, callback, polymorphism, type checking und so weiter.
Meine Beratung ist das du CS50x von Harvard nimmst durch edx.org.

-------------------------------------------------------------------------------------------
Ich muss mein deutsche verbessert. Sie dürfe helfen und mir Korrektion mit Erklärung schicken, aber nur nicht Hier als Kommentar, es werde un¬an¬ge¬nehm.
 
Zurück
Oben