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.
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...
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 ;-)