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


von Anfänger (Gast)


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)


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)


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)


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)


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)


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)


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)


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)


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)


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)


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)


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) Benutzerseite


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)


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)


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.

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
Noch kein Account? Hier anmelden.