- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Unterprogramme in C?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2006
    Beiträge
    14

    Unterprogramme in C?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.05.2008
    Ort
    Oststeinbek
    Alter
    34
    Beiträge
    607
    Sowas gibt es, es nennt sich "Funktion"

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

    Gruß, Yaro

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    gibt es hier eine Möglichkeit in C??
    Ja gibt es, nämlich ganz normale Funktionen
    So viele Treppen und so wenig Zeit!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2006
    Beiträge
    14
    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...???

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Vielleicht nochmal ein kurzes Beispiel...

    das ist eine Funktionsdefinition, die irgendwo in einer .c Datei stehen kann:
    Code:
    int Addiere(int a, int b)
    {
    	return a + b;
    }
    Aufrufen kann man diese Funktion dann z.B. so:
    Code:
    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):
    Code:
    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.
    So viele Treppen und so wenig Zeit!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2006
    Beiträge
    14
    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

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    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.
    So viele Treppen und so wenig Zeit!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.08.2005
    Ort
    winterthur
    Beiträge
    115
    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)

    -----------------------
    Code:
    #!/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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress