Forum: PC-Programmierung Grundsätzliche Fragen zur Programmierung in C


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 Anfänger (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

Ich möchte ein lauffähiges Programm erstellen. Mit einem Compiler habe 
ich schon mal Quelldateien übersetzt.


Manche Quellen bestehen nur aus einer "Main", andere enthalten noch 
"make" wiederum andere noch diverse .h Dateien.

Frage 1: Wozu sind diese Dateien erforderlich?
Frage 2: wie programmiert man diese?


Verständliche Antworten auf diese grundsätzlichen Fragen habe ich 
nirgendwo finden können.

von Louis (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Anfänger schrieb:
> Verständliche Antworten auf diese grundsätzlichen Fragen habe ich
> nirgendwo finden können.

Diese Aussage kann NUR bezweifelt werden...

von Hugo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Anfänger schrieb:
> Verständliche Antworten auf diese grundsätzlichen Fragen habe ich
> nirgendwo finden können.

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

von Mark B. (markbrandis)


Bewertung
1 lesenswert
nicht lesenswert
Anfänger schrieb:
> Manche Quellen bestehen nur aus einer "Main", andere enthalten noch
> "make"

Eine Quelldatei enthält kein make.

> wiederum andere noch diverse .h Dateien.
>
> Frage 1: Wozu sind diese Dateien erforderlich?

Main: Ist die erste Funktion, die beim Starten des Programms aufgerufen 
wird.
make: Wird verwendet um die Quelldateien zu übersetzen. Makefiles sind 
also selbst keine Quellen.
.h: So genannte Header-Dateien. Dienen dazu, um Deklarationen von 
Funktionen oder Konstanten für mehr als eine Quelldatei verfügbar zu 
machen.

> Frage 2: wie programmiert man diese?
>
> Verständliche Antworten auf diese grundsätzlichen Fragen habe ich
> nirgendwo finden können.

Solche Dinge werden in jedem Buch für Anfänger erklärt.

von PittyJ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dann gib uns doch mal Fakten:
Welche Bücher hast du bisher dazu gelesen? Dann könnte man die 
Autoren/Verlage anschreiben, dass die Bücher verbessert werden können. 
So wäre allen geholfen.

von Noch einer (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
Die Frage ist doch durchaus berechtigt. Und gar nicht so einfach zu 
beantworten.

Die Beispiele der Lehrbücher sind zu klein. Da sind mehrere Dateien 
eigentlich unsinnig. Da erkennt man nicht, wofür das gut sein soll.

Die Beispiele aus der Realität sind so misslungen - die sollte man nicht 
als Vorbild nehmen.

Da hat man ein Henne-Ei Problem. Man muss erst mal selbst erlebt haben, 
wie ein grösseres Programm im Chaos versinkt, bevor man überhaupt 
versteht, wo das Problem liegt.

Trotz der ganzen Lehrbücher findet man so selten sinnvoll auf Dateien 
aufgeteilte Programme. Offensichtlich taugen die Erklärungen in den 
Anfänger-Lehrbüchern nichts.

von TMK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mir ist aufgefallen, dass viele "Anfänger"-Tutorials Header-Dateien gar 
nicht erwähnen, sondern immer alles in die .c schreiben. Wenn das mal 
nicht funktioniert, weil der Compiler meckert, dann schreiben sie lieber 
Funktions prototypen "void a(int hallo);" in die .c Dateien ganz oben 
rein.
So kann das dann nichts werden.
Wozu man die .h braucht? Es wurden schon Links dazu gegeben. Meiner 
Ansicht nach gibt es rein theoretisch nur einen Grund: Weil man die .c 
Dateien nicht hat! Das dürfte recht selten bei privaten Projekten 
vorkommen, es ist aber im Profibereich ganz normal, eine Library 
einzukaufen, die dann als .lib oder .o oder .a kommt. Damit man die 
Funktionen darin überhaupt nutzen kann, und der Lizenzgeber seinen 
Quellcode nicht heraus geben muss, benötigt man die Header.

von Oliver S. (oliverso)


Bewertung
1 lesenswert
nicht lesenswert
TMK schrieb:
> Meiner
> Ansicht nach gibt es rein theoretisch nur einen Grund.

Deiner ein theoretischen Ansicht nach mag das so sein.

Rein praktisch wird das gemacht, um überhaupt real nutzbare Programme 
jenseits von "Hello world" und der Anfänger-Tutorial-Größe sinnvoll 
erstellen zu können.

Ohne Code-Gliederung und sinnvolle Aufteilung geht sowas nicht.

Oliver

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Anfänger schrieb:
> Verständliche Antworten auf diese grundsätzlichen Fragen habe ich
> nirgendwo finden können.

Dann hast du nach den falschen Begriffen gesucht.

Das Stichwort hier heißt "Modularisierung", d.h. die Unterteilung eines
großen Programms in mehrere getrennt zu kompilierende Einheiten, die
jeweils aus Implemetation (.c-Datei) und Schnittstelle (.h-Datei)
bestehen und deren Erstellungsprozess (Kompilieren und Linken) meist
durch make gesteuert wird.

Google liefert dir auf die Anfrage nach

  Modularisierung in C

hin fast beliebig viele weitere Informationen zu diesem Thema.

von TMK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Deiner ein theoretischen Ansicht nach mag das so sein.

Du hast das "theoretisch" falsch verstanden. Ich meinte damit, dem 
C-Compiler ist es egal. Dass man Programme in sinnvolle Zeile zerbrechen 
sollte, die in sich in gewisser Weise abgeschlossen sind, versteht sich 
von selbst.

von Anfänger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Anfänger schrieb:
>> Verständliche Antworten auf diese grundsätzlichen Fragen habe ich
>> nirgendwo finden können.
>
> Dann hast du nach den falschen Begriffen gesucht.
>


Das ist das Los aller Änfänger. :(

Zur Zeit im Urlaub; werde danach mal den Stichpunkten weiter suchen.

Der anfang ist schon mal gemacht. Melde mich später

von Georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Noch einer schrieb:
> Man muss erst mal selbst erlebt haben,
> wie ein grösseres Programm im Chaos versinkt

Noch einer schrieb:
> Offensichtlich taugen die Erklärungen in den
> Anfänger-Lehrbüchern nichts

Du meinst also ernsthaft, ein Lehrbuch müsste chaotische Programme 
auflisten, damit ein Anfänger das Problem begreift? Vielleicht solltest 
du dich bei einem Verlag bewerben. Learning by Chaos wäre mal was neues.

Georg

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> Du meinst also ernsthaft, ein Lehrbuch müsste chaotische Programme
> auflisten, damit ein Anfänger das Problem begreift?

In gewissen Maßen ist das tatsächlich nötig, damit der Anfänger die 
Chance hat, zu begreifen, warum man eine bestimmte Vorgehensweise 
einer anderen gegenüber bevorzugen soll.

Ihm immer nur mitzuteilen "mach es so, weil es anders böse ist" ist 
nicht hilfreich, er muss erkennen, warum es böse ist, es anders zu 
machen.

von S. R. (svenska)


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> Learning by Chaos wäre mal was neues.

Das erste Mal, wenn du ein von dir geschriebenes Programm nicht mehr 
verstehst und deswegen mehrere Wochen Arbeit wegwerfen musst, erkennst 
du die Bedeutung hinreichender Dokumentation.

Das erste Mal, wenn du wegen einer mangelhaften Struktur große Teile 
eines Programms wegwerfen musst, erkennst du die Bedeutung einer guten 
Strukturierung (oder den Wert eines Refactorings).

Erfahrung ist Wissen über Dinge, die nicht funktionieren.

von Herr Flitzpiep (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Georg schrieb:
> Du meinst also ernsthaft, ein Lehrbuch müsste chaotische Programme
> auflisten, damit ein Anfänger das Problem begreift?

Du wirst lachen: Gleich für mehrere Programmiersprachen existieren 
Bücher, die genau das machen. Es wird Code mit überwiegend "typischen" 
Problemen (mehr oder weniger subtile Programmfehler, schlechte Struktur 
etc.) gezeigt, die man finden und korrigieren soll. Vielleicht nicht 
besonders sinnvoll für absolute Anfänger, aber für "leicht 
Fortgeschrittene" gar nicht so schlecht.

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]
  • [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.