Hallo Leute. Ich würde gerne C Programme unter Ubuntu schreiben lernen. Ich habe von C & Co noch so gar keine Ahnung. Ich habe bislang Nur Basic in allen Variationen geschrieben von damals Qbasic über Bascom bis Visual Basic und Gambas... Nun habe ich mir Eclipse geladen und ein c Plugin installiert. Allerdings bekomme ich noch nicht mal die Beispiel Programme ans Laufen. Es gibt den Fehler Make keine regel um All zu erstellen. Das Programm hingegen scheint fehlerfrei. Grobe Schreibfehler werden von Eclipse angezeigt. Kennt ihr eine Seite wo man sich hilfe erlesen kann? Zumindest das ich erstmal die Infrastruktur ans laufen bringe. Ist Eclipse überhaupt gut dafür geeignet? Lg
Gerald schrieb: > Ich habe von C & Co noch so gar keine Ahnung. Dann hoffe ich du hast ein anständiges C-Buch am Start zum Lernen :) Gerald schrieb: > Nun habe ich mir Eclipse geladen und ein c Plugin installiert. Es ist sinnvoller direkt das eclipse-cdt Paket herunterzuladen und zu installieren, anstatt CDT nachzuinstallieren. Gerald schrieb: > Es gibt den Fehler Make keine regel um All zu erstellen. Dann hast du vermutlich das Projekt falsch angelegt. Am Einfachsten ist es zu beginn ein "Empty Project" oder "Hello World ANSI C Project" anzulegen, aber kein "Makefile project". Gerald schrieb: > Ist Eclipse überhaupt gut dafür geeignet? Die Meinungen sind hier gespalten... Der Vorteil an eclipse ist dass es viele Programmiersprachen und Plattformen in einer IDE abdeckt, die auch noch unter Windows/Linux/Mac identisch funktioniert. Wenn du aber einfach nur ein paar Linux C Programme schreiben willst, könnte QtCreator oder EM::Blocks u.U. einfacher sein... PS: Überleg dir, vielleicht doch C++ statt C zu lernen. Es gibt kaum einen Grund noch C zu verwenden (fast alle Plattformen haben C++ Compiler), und wenn du erst C lernst und dann C++, musst du alle schlechten C-Angewohnheiten wieder un-lernen :-) Du musst ja nicht direkt alle Funktionen von C++ nutzen, aber einige praktische Dinge wie die string-Klasse helfen einem doch sehr.
Vielleicht solltest du dir erstmal die Grundlagen von C aneignen - entweder durch ein gutes C Buch oder durch eines der unzähligen Tutorials im Netz. Dann schreibst du dein erstes "Hello World" nicht mit Eclipse, sondern mit einem normalen Texteditor. Dein "Hello World" kompilierst du dann auf der Kommandozeile unter Ubuntu mit dem gcc und führst es aus. Dann schreibst du dafür ein kleines Makefile. Sobald das klappt, kannst du versuchen ein Projekt in Eclipse anzulegen, und es dort zu kompilieren.
:
Bearbeitet durch User
Also Buch & Co sind schön und gut aber ich kann besser verstehen wenn ich es ausprobieren kann. Also hello world Programm aus dem Buch und dann ändern und verstehen. Neue Befehle lesen und Ausprobieren. Niklas du hattest recht vermutlich Projekt falsch angelegt. Niklas G. schrieb: > u beginn ein "Empty Project" oder "Hello World ANSI C Project" > anzulegen, aber kein "Makefile project". Jetzt hat es geklappt. Besten dank dafür.
Gerald schrieb: > Neue Befehle lesen und Ausprobieren. Was in C ein hervorragender Weg ist, wie man letztlich Programme mit undefiniertem Verhalten erstellen wird. "compiliert und läuft" ist in C der grundsätzlich verkehrte Weg. Das kann man mit Pascal machen.
Niklas G. schrieb: > Du musst ja nicht > direkt alle Funktionen von C++ nutzen, aber einige praktische Dinge wie > die string-Klasse helfen einem doch sehr. Jo, und wenn man dann auf Mikrocontroller gehen will, stellt man überrascht fest, daß man die ganzen wirklich coolen Sprachfeatures auf einmal nicht mehr nutzen kann. Super Sache, die ganze "magic behind the scenes". Mal abgesehen davon, daß selbst der Schöpfer von C++ die Sprache nicht zu 100% versteht..
Nop schrieb: > Jo, und wenn man dann auf Mikrocontroller gehen will, stellt man > überrascht fest, daß man die ganzen wirklich coolen Sprachfeatures auf > einmal nicht mehr nutzen kann. Wie in C auch. Es war nicht die Rede von Mikrocontrollern. Nop schrieb: > Mal abgesehen davon, daß selbst der Schöpfer von C++ die Sprache nicht > zu 100% versteht.. Klingt lustig, wo hast du das her?
Naja auf Dauer werde ich zumindest wenn ich es verstanden habe auch Mikrocontroller versuchen. Die Avr's bearbeite ich zurzeit ja auch mit Basic Bascom. Aber erst mal will ich ja die Grundlagen verstehen. Und bis ich C oder C++ so gut kann wie Basic werde ich wohl, weil es manchmal schnell gehen muss, noch viele Programme in Basic schreiben.
Niklas G. schrieb: > Wie in C auch. C ist wesentlich kompakter, somit gibt es wesentlich weniger Sachen, auf die man bei µC verzichten sollte. Zumal C++ eine Menge Compilermagic veranstaltet (nichts anderes ist Abstraktion nunmal), weswegen C++ auf Mikrocontrollern sich meistens auf C mit Klassen begrenzt. > Es war nicht die Rede von Mikrocontrollern. Wenn jemand auf einer Plattform "mikrocontroller.net" eine Frage stellt zum Lernen von C, dann wird er damit wahrscheinlich nicht Linuxcluster programmieren wollen. > Klingt lustig, wo hast du das her? http://www.stroustrup.com/japanese2010.pdf Seite 9: "Even I can’t answer every question about C++ without reference to supporting material (e.g. my own books, online documentation, or the standard). I’m sure that if I tried to keep all of that information in my head, I’d become a worse programmer. What I do have is a far less detailed – arguably higher level – model of C++ in my head." Der zweite Satz ist daran sehr bezeichnend. Aus dem Kontext wird aber auch klar, wie das gemeint ist, und in welchen Fällen das auch nützlich ist. Nämlich in dem, daß man abstrakter programmieren will. Mit anderen Worten, für systemnahe Programmierung, wie man sie auf Mikrocontrollern hat, nicht der Bringer. Weil einem die Abstraktion da im Weg steht, denn wenn man nicht die Ressourcen von PCs hat, muß man die ganze Abstraktion bis zum ausführbaren Code, die der Compiler macht, nebenher zu Fuß auch noch nachvollziehen. Was übrigens ein Grund ist, wieso z.B. der Linuxkernel nicht in C++ geschrieben ist. Deswegen, wie schon gesagt, verflacht C++ meist zu C mit Klassen. Das kann man in C aber auch mit structs mit Funktionszeigern haben. Daß C++ "besser" als C sei, ist Unsinn. Es gibt nur Fälle, in denen man mit reinem C nicht wirklich mehr arbeiten will. Beispielsweise bei eventgetriebener GUI-Programmierung wird das sehr häßlich.
Nop schrieb: > weswegen C++ auf > Mikrocontrollern sich meistens auf C mit Klassen begrenzt. Keineswegs. Es gibt in C++ noch viele weitere nützliche Features, die absolut keinen Overhead haben und auch Embedded-Programmierung vereinfachen. Funktions-Overloads, templates, constexpr, lambdas... Nop schrieb: > Even I can’t answer every question about C++ without reference to > supporting material Ich wette es kennt auch keiner das Manual von einem AVR auswendig, dennoch wird dir keiner sagen dass AVR's daher zu kompliziert zur Nutzung sind... Und jeden einzelnen Aspekt von C kennen vermutlich auch nur sehr wenige auswendig. Nop schrieb: > Nämlich in dem, daß man abstrakter programmieren will. Mit anderen > Worten, für systemnahe Programmierung, wie man sie auf Mikrocontrollern > hat, nicht der Bringer. Die Logik verstehe ich nicht. Auch auf Mikrocontrollern kann man komplexe Programme haben, auch wenn sie systemnah sind. Wozu sonst gibt es Controller mit MBytes an Programmspeicher? Bei solchen Programmen freut man sich über die Abstraktionsmechanismen. Mit etwas Erfahrung kann man diese so einsetzen, dass das Programm kein bisschen ineffizienter als ein entsprechendes C-Programm ist. Nop schrieb: > Was übrigens ein Grund ist, wieso z.B. der > Linuxkernel nicht in C++ geschrieben ist. Der Hauptgrund ist mehr, dass es in der Linux-Anfangszeit noch keine (guten) OpenSource C++ Compiler gab... Und es gibt Kernel in C++, das ist überhaupt kein Problem. Nop schrieb: > Deswegen, wie schon gesagt, verflacht C++ meist zu C mit Klassen. Wenn man nicht weiß was C++ sonst noch zu bieten hat, vielleicht... Nop schrieb: > Daß C++ "besser" als C sei, ist Unsinn. Es kann alles was C kann und noch viel mehr, und alles mindestens genauso effizient - manchmal effizienter. Zudem sind einige Dinge, wie String-Verarbeitung und Container, einfacher zu nutzen. Ich finde, das sind gute Argumente für "besser". Zudem ist es so, dass die Optimierung einzelner Takte meistens eher irrelevant ist. Stattdessen ist es viel wichtiger, die Algorithmen & Datenstrukturen zu verbessern, um so Größenordnungen an Effizienz gewinnen zu können. Dies ist in C++ einfacher, weil man sich da dank Abstraktion besser drauf konzentrieren kann. Aber egal, die Diskussion wurde hier ja eigentlich schon bis zum Erbrechen geführt...
:
Bearbeitet durch User
Bjarne Stroustrup ist einfach nur ein grundehrlicher Mensch, der sich (in den veröffentlichen Reden) nie als als allwissender präsentiert hat, wie z.B. Ein gewisser NOP. Was er aber nachgewiesen hat, ist daß C++ schneller sein kann, als die Este C-Lösung. Weil es nämlich Fehler schon zur Compiletime erkennen kann, die C prinzipiell nur zur Laufzeit prüfen kann. Empfohlen seien Vorträge von B.Stroustrup, Herb Sutter, Andrei Alexandrescu und, wenn man die durch hat Walter E. Brown. Alles online verfügbar, aber nichts für mental Zementierte.
Also wenn das Ziel später ist Mikrocontroller zu programmieren, kann man gerne bei C bleiben. Sicher hat C++ Sprachelemente die auf µC auch sehr nützlich sind, aber bei einfachen Programmen fallen die nicht wirklich ins Gewicht. Dann würde ich lieber zu ordentlich gelernten C raten. Und wichtig, erst C am PC lernen und dann mit µC Programmierung anfangen sonst gibts zu viele Baustellen und Frust! Aber wenns um Programme schreiben am PC geht, kann ich C wirklich nicht empfehlen. Ich habs jedenfalls irgendwann aufgegeben, viel zu umständlich. Lieber C++. Allein wenns schon um komplexere Datenstrukturen als Arrays mit fester Größe geht, gehts schon los. In modernen Programmiersprachen hat man eine riesige Auswahl an Datenstrukturen. In C++ gibts die STL und die ist richtig gut. In C gibts hingegen gar nichts. Es ist ja nicht mal möglich eine ordentliche Bibliothek für C zu schreiben, die sowas abdeckt ohne schrecklich umständlich bedienbar zu sein, weil es weder Templates noch Generics in C gibt. Ne danke das muss man sich anno 2016 nicht mehr antun. Bei der Kernel- und Treiberentwicklung hingegen ist das wiederum was anderes.
Gerald schrieb: > Ich würde gerne C Programme unter Ubuntu schreiben lernen. > Ich habe von C & Co noch so gar keine Ahnung. "The C Programming Language", auch bekannt als "K&R" wäre ein hundertprozentiger Buchtipp von mir. Ich habe selber leider anfangs den Fehler gemacht es nicht zu beachten, weil ich dachte "Was will ich mit so einem alten Schinken" aber um C in einer Unix-Umgebung zu lernen ist es meiner Meinung nach heute immer noch sehr angebracht. Es ist verhältnismäßig kurz und knapp aber ohne dabei oberflächlich zu sein und es steckt voller Programmierbeispiele und Übungen. Schau am besten mal bei Amazon oder so ins Buch rein und kauf dir gegebenenfalls eine gebrauchte Ausgabe. Ich kann es wirklich nur empfehlen.
Nop schrieb: > Es war nicht die Rede von Mikrocontrollern. > > Wenn jemand auf einer Plattform "mikrocontroller.net" ... im Forum "PC-Programmiering"... > eine Frage stellt zum Lernen von C, dann wird er damit wahrscheinlich ... einen PC programmieren wollen.
PC-Programmierer schrieb: > Nop schrieb: >> Es war nicht die Rede von Mikrocontrollern. >> >> Wenn jemand auf einer Plattform "mikrocontroller.net" > > ... im Forum "PC-Programmiering"... > >> eine Frage stellt zum Lernen von C, dann wird er damit wahrscheinlich > > ... einen PC programmieren wollen. NOP kenn ich noch aus Assemblerzeiten. Zeichnete sich durch völlige Funktionsarmut aus. Anscheinend hat sich da nix geändert ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.