- LiTime Speicher und Akkus         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Parameter von Funktionen in Funktionen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.05.2004
    Alter
    38
    Beiträge
    388

    Parameter von Funktionen in Funktionen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Guten Abend,
    Ich habe Funktionen in denen ich Funktionen aufrufe.

    Die Parameter der in der Funktion aufgerufenen Funktionen muss ich ja der ersten Funktion übergeben.
    Nur leider hat jede Funktion schon einige Parameter, dadurch summiert sich das ja stark auf.
    Sprich die erste Funktion kann z.B. 10 Parameter haben.
    Das ist extrem unübersichtlich und verwirrend.

    Gibt es dazu eine andere Lösung?

    Code:
    Funktion(par1, par2, par3, par4, par5, par6, par7....)
    {
    funk1(par1, par2, par3);
    funk2(par2, par4, par5);
    funk3(par6, par7);
    funk4(par...);
    }
    Ich hoffe es ist verständlich was ich meine

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Du könntest eine Struktur erstellen, in der alle Parameter schön sortiert enthalten sind. Dann brauchst Du der Funktion nur noch einen Zeiger auf diese Struktur zu übergeben.

    z.B.
    Code:
    typedef struct {
    par1[3];
    par2[3]
    par3[2];                   
    ...
    } Parameters ;
    
    void Funktion(Parameters *FktParam)
    {
    funk1(FktParam->par1);
    funk2(FktParam->par2);
    funk3(FktParam->par3);
    ...
    }
    
    int main(coid)
    {
    Parameters myParam;
    
    myParam.par1 = {1,2,3};
    myParam.par2 = {4,5,6};
    myParam.par3 = {7,8,9};
    ...
    
    Funktion(&myParam);
    }
    Alternativ würde sich auch ein 2-dimensionales Array anbieten.

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Ich habe zwar keine grosse Ahnung von Programierung, aber rein logisch würde ich vermuten, dass es da keine grosse Alternative geben kann.
    Wenn eine Funktion wie in deinem Beispiel 7 Parameter benötigt, wird man sie ihr wohl auch geben müssen.
    Ausnahme wäre, wenn diese Parameter teilweise so voneinander abhängig sind, dass man sie innerhalb der Funktion berechnen kann. Aber dann wäre die Funktion wohl einfach nur schlecht gemacht.

    Ein bischen Hilfestellung bei Funktionen mit vielen Parametern geben bessere IDEs dadruch, dass sie schon beim Eingeben Anzeigen welche Parameter erwartet werden und überprüfen ob hier wenigstens die richtigen Datentypen eingegeben werden.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Eine Möglichkeit wäre noch globale Variable, jede Funktion hat darauf Zugriff.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.05.2004
    Alter
    38
    Beiträge
    388
    Globale Variablen waren auch mein Gedanke, nur wen ich z.B. folgende Dateien habe:

    main.c
    funkt.c
    funk.h
    output.c
    output.h

    und ich in funk.h Variablen deklariere und dies dann in output.c verwenden will (als Parameter einer Funktion). Klappt das nicht das der Funktion diese Variablen unbekannt sind.
    Das verwunder mich, da ich meinte alle nicht anderweitig definierten Variablen sein global. Wen ich sie als Parameter mitübergebe funktioniert es.

    Ein Array wollte ich vermeiden den da wird es wirklich unübersichtlich.
    Eine Struktur wäre aber eine option

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Variablen solltest Du nie in Header-Dateien verwenden.
    Die sollten immer in der entsprechenden C-Datei definiert werden.

    Wenn Du globale Variablen in verschiedenen Dateien verwenden willst, musst Du das Attribut "extern" verwenden.

    z.B. Deklarierst Du in der Datei funk.c eine Variable:
    int meineVariable;

    wenn Du diese Variable dann auch in der output.c verwenden willst, musst Du sie dort so bekannt machen:
    extern int meineVariable;

    [edit]
    Alternativ kannst Du das
    extern int meineVariable;
    auch in die funk.h packen und diese dann in der output.c includieren.
    Das ist sogar die bessere Variante - bin gerade erst beim rumstöbern zu dem Thema drauf gestossen
    [/edit]

    Gruß,
    askazo

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    Hi,

    ich hätte auch noch eine Frage, die gut zum Thema passen würde: was ist von der Schnelligkeit der Abarbeitung des Programms im Microcontroller sinnvoller/besser: den Funktionen die Variablen ganz "normal" übergeben, oder eher mit Pointern arbeiten?

    Meine Funktionen brauchen ebenfalls einige Parameter (vorwiegend Arrays), was wäre da sinnvoller?

    Viele Grüße

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    In der Regel wird durch die Verwendung von Pointern ein schnellerer Code erzeugt. Aber Vorsicht: es gibt einen grundlegenden Unterschied zwischen einem Funktionsaufruf mit Pointer und dem mit "normaler" Übergabe:

    Wenn Du ganz normal die Variable an die Funktion übergibst, kannst Du innerhalb der Funktion mit der Variable machen, was Du willst. D.h. Du kannst sie verändern, ohne dass die aufrufende Funktion das mitbekommt.

    Wenn Du einen Pointer auf die Variable an die Funktion übergibst und die Variable innerhalb der Funktion änderst, ändert sich die Variable auch in der aufrufenden Funktion.

    Gruß,
    askazo

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    @Ikarus: Pointer sind schneller.
    Und eine Array-Übergabe ist nur per Pointer möglich.

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.05.2004
    Alter
    38
    Beiträge
    388
    Zitat Zitat von askazo
    Variablen solltest Du nie in Header-Dateien verwenden.
    Die sollten immer in der entsprechenden C-Datei definiert werden.

    wenn Du diese Variable dann auch in der output.c verwenden willst, musst Du sie dort so bekannt machen:
    extern int meineVariable;

    [edit]
    Alternativ kannst Du das
    extern int meineVariable;
    auch in die funk.h packen und diese dann in der output.c includieren.
    Das ist sogar die bessere Variante - bin gerade erst beim rumstöbern zu dem Thema drauf gestossen
    [/edit]
    Ich habe mich glaub falsch ausgedrückt. In der Header steht z.B.
    Code:
    uint8_t var;
    Im Sourcefile
    Code:
    var = 55;
    var++;
    ....
    Ich müsst mich jetzt schwer irren aber ich mache das seit Jahren so und meinte dies auch so gelernt zu haben?

    Danke für eure Tips

    @ikarus
    Arrays werden immer mit Pointer in eine Funktion übergeben.
    Code:
    void funk(uint8_t *pos);
    funk(pos);

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus