Forum: PC-Programmierung C Programmieren unter Ubuntu anfänger


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gerald (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
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.

von Slippin J. (gustavo_f)


Bewertung
0 lesenswert
nicht lesenswert
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
von Gerald (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Blubb (Gast)


Bewertung
1 lesenswert
nicht lesenswert
www.c-howto.de

von Nop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Nop (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
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..

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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?

von Gerald (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Nop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Niklas G. (erlkoenig) Benutzerseite


Bewertung
3 lesenswert
nicht lesenswert
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
von Carl D. (jcw2)


Bewertung
3 lesenswert
nicht lesenswert
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.

von TriHexagon (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Christopher J. (christopher_j23)


Bewertung
1 lesenswert
nicht lesenswert
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.

von PC-Programmierer (Gast)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.