PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterprogramme in C?



Mindhunter
30.09.2010, 20:20
Hallo zusammen,

ich such jetzt schon seit einigen Tagen nach einer Möglichkeit in C eine Art von Unterprogrammen zu erstellen.

Ich möchte zum Beispiel:

- ein Programm für: - Sensoren
- Motorsteuerung
- Motorrückmeldung
- Steuern von Lichteffekten

und das alles dann über ein "Hauptprogramm" aufrufen, gibt es hier eine Möglichkeit in C??

Ich würde mich über Rückmeldungen freuen, habe trotz Hilfe nichts gescheites gefunden.

Grüße

Mindhunter

yaro
30.09.2010, 20:26
Sowas gibt es, es nennt sich "Funktion"

Ich würde dir ein C-Tutorial oder Buch empfehlen.

Gruß, Yaro

Felix G
30.09.2010, 20:29
gibt es hier eine Möglichkeit in C??Ja gibt es, nämlich ganz normale Funktionen

Mindhunter
30.09.2010, 23:22
Ich hab genug Lektüre zu dem Thema, trotzdem Danke.

Jetzt die Frage.. geht das dann nur über Header Dateien, oder gibt es dazu auch nochmal Alternativen...???

markusj
01.10.2010, 00:32
Du solltest dich evtl. nochmal der Lektüre zuwenden:
Headerdateien beinhalten einfach nur gemeinsame Definitionen (+ gelegentlich etwas Quelltext). Der Inhalt der Headerdateien wird dann während des Kompiliervorganges anstelle der passenden #include-Direktive eingefügt.
Die Funktionen selbst landen dann in ein oder mehreren .c-Dateien, die für sich jeweils einen Aufgabenbereich erfüllen sollten (Modularität). Die Funktionsprototypen in den Headerdateien haben nur den Zweck, den Compiler darüber zu informieren, welche Funktionen zur Verwendung verfügbar sind, da dieser den Inhalt der Quelltextdateien nur einzeln betrachtet. Wird eine Funktion verwendet, die er nicht kennt, gibt er (mindestens) eine Warnung aus.
Erst der Linker packt dann alle benötigten Funktionen aus den verschiedenen Modulen zusammen.

mfG
Markus

Felix G
01.10.2010, 01:01
Vielleicht nochmal ein kurzes Beispiel...

das ist eine Funktionsdefinition, die irgendwo in einer .c Datei stehen kann:
int Addiere(int a, int b)
{
return a + b;
}

Aufrufen kann man diese Funktion dann z.B. so:

int Ergebnis = Addiere(3, 5);
Aber das geht nur in der gleichen .c Datei, und auch erst nach der Funktionsdefinition, da diese Funktion dem Compiler vorher einfach nicht bekannt ist.

Abhilfe schafft eine Funktionsdeklaration (auch "Prototyp" genannt):

int Addiere(int a, int b);Wie du siehst enthält diese Deklaration selbst keinen Code, sondern dient nur als Hinweis nachdem Motto "pass auf, da gibt es eine Funktion mit dem Namen Addiere die zwei int Parameter hat, und einen int als Rückgabewert liefert". Setzt man diese Deklaration ganz an den Anfang der .c Datei, ist die Funktion Addiere in der gesamten Datei verfügbar (auch schon vor deren Definition).

Möchte man in einer anderen .c Datei auf diese Funktion zugreifen reicht das aber noch nicht, in diesem Fall schreibt man den Prototyp nicht in die .c Datei, sondern in eine .h Datei die per #include in allen .c Dateien eingebunden wird, welche Zugriff auf die Funktion Addiere benötigen.


Dabei sollte man wissen, daß z.B. ein #include "abcdef.h" vom Präprozessor einfach durch den kompletten Text von abcdef.h ersetzt wird (bevor der Compiler die Datei verarbeitet). Das ganze ist also nichts weiter als ein automatisches Einfügen der Funktionsdeklarationen (und was sonst noch so in den .h Dateien steht), in allen .c Dateien die sie benötigen.

Mindhunter
01.10.2010, 01:19
Alles klar, vielen Dank, genau das war meine Vermutung, aber ich war mir eifach nciht sicher ob es nur über die Prototypen in den Header geht, oder ob es auch eine andere Variante gibt, welche ich bisher einfach nciht gefunden habe.

Die einzige Frage die jetzt bleibt ist ob ich das richtig verstanden habe.

Also, ich schreib mir meine Prottypen und mache diese in verschieden Headerdateien für die verschiedenen Module. Anschließend habe ich dann eine einzige .C Datei die dann aus allen Headerdateien die einzelnene Programmteile zusammenbaut??

Oder gibt es noch die Variante dass mehrere .C Dateien vorhanden sind?? Falls ja wie werden diese dann verknüpft, genau das ist der Knackpunkt wo ich noch nicht durchsteige.

Vielen Dank für die vielen un vorallem Gut erklärten Antworten.

LG

Mindhunter

Felix G
01.10.2010, 08:16
Natürlich gibt es mehrere .c Dateien, und die Headerdateien sind genau das was man braucht, um mehrere .c Dateien miteinander zu verbinden...

Angenommen du hast mehrere Funktionen zum Auswerten diverser Sensoren, dann kannst du diese Funktionen etwa in einer Datei Sensor.c definieren, und die Prototypen packst du entsprechend in eine Datei Sensor.h. Zusammen bilden diese dann ein Modul, dessen Funktionen du in anderen Modulen deines Projekts nutzen kannst, indem du sie mit einem #include "Sensor.h" dort bekannt machst.

Würde man den gesamten Code in nur eine .c Datei packen, bräuchte man prinzipiell auch keine Header, aber das wäre dann sehr unübersichtlich.

nomad
01.10.2010, 10:47
hi,
also angenommen du hast 3 source-files
unter linux
1) (main): sdlPathFinder304.cpp (gilt auch fuer c-files)
2) (sub1): sdlAstar304.cpp
3) (sub2): sdlSerialCom304.cpp

jetzt moechtest du eine ausfuehrbare Datei:
dass wird jetzt gemacht: mit einem einfachen script (unter linux)

-----------------------


#!/bin/sh
# name: compileSDLPathFinderScript304.sh
# dd. 01.10.2010
#
# with: main: sdlPathFinder304.cpp
# sub1: sdlAstar304.cpp
# sub2: sdlSerialCom304.cpp
#
echo "Compilation of sdlPathFinder304"
g++ -Wall `sdl-config --cflags` -c sdlPathFinder304.cpp
g++ -c sdlAstar304.cpp
g++ -c sdlSerialCom304.cpp
g++ -O2 -s `sdl-config --libs` -o sdlPathFinder304 sdlPathFinder304.o sdlAstar304.o sdlSerialCom304.o -lm
echo "CompileSDLPathFinderScript304 is Done"

exit 0

also zuerst wird object-code erzeugt,
dann alles miteinander gelinkt.
selbstverstaendlich kann man das auch mit einem "makefile" machen
aber das wuerde zu weit fuehren.
ich wuerde Dir ein gutes C-buch empfehlen.
gruss nomad