-         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: eine struct als Parameter an Funktion übergeben...?

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.04.2015
    Beiträge
    297
    Anzeige

    Wenn Du an irgendeiner Stelle in C eine Funktion aufrufst, muss der Compiler nicht wissen, was in der Funktion an Code steht. Er muss aber den Funktionsrumpf (Name, Parameter, Rückgabewert) für die Codeauflösung kennen. Steht die eigentliche Funktion weiter unten hinter dem Aufruf, erledigt man diese Bekanntmachung üblicherweise über eine Funktionsdeklaration (Vorwärtsreferenz):

    void DoSomething(int hellIsFrozen); //The forward reference (function header with ending semicolon)

    void main(){DoSomething(42);} //The call
    void DoSomething(int hellIsFrozen){while(hellIsFrozen);} //The function

    Typischer Halbblödenautomatismus: Um die manuelle Deklaration von Vorwärtsreferenzen zu vermeiden, legt der Arduino-Compiler ungefragt für jede Funktion eine Deklaration unterhalb der #includes an. Dass eine dieser Deklarationen einen Datentyp verwendet, der erst danach im Code deklariert wurde, scheint dabei in Kauf genommen zu werden, ebenso wie die nicht reproduzierbare Fehlermeldung, die naturgemäß nur auf eine vom Compiler erzeugte Codezeile (genau auf die automatisch generierte Vorwärtsreferenzzeile, also quasi für den User nicht nachvollziehbar) verweisen kann.

    Ich will das Arduino-Konzept nicht allgemein schlecht reden. Aber DAS ist wirklich dilletantisch gemacht.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.506
    ja, genau:
    es lag nicht an der Funktion, die stand an der richtigen Stelle.
    auch die struct war ursprünglich schon an der richtigen Stelle.
    Es lag am temp. generierten Arduino-Zwischencode.
    Muss man mal bei github als issue melden.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.506
    update:
    die Ursache muss doch woanders gelegen haben, nicht an der gezeigten Reihenfolge sondern evtl bei einer ganz anderen Funktion im Originalcode, die mit diesem error direkt nichts zu tun hatte - lässt sich z.Zt aber nicht lokalisieren.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.506
    update 2:
    es lag doch an einem temporären prototype, das aber erst durch eine weitere - dazwischenliegende - Funktion kritisch wurde, selbst wenn wie in diesem Fall jene zusätzliche Funktion noch nicht einmal genutzt wurde:

    https://github.com/arduino/Arduino/i...ment-443704817

    Nichtsdestotrotz scheint die neueste IDE 1.9.x diesen Fehler nicht mehr zu erzeugen, wie der Mitentwickler per1234 ja schrieb.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Array an Funktion übergeben
    Von jok3r im Forum Arduino -Plattform
    Antworten: 7
    Letzter Beitrag: 02.04.2014, 23:19
  2. Array an Funktion übergeben
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 02.05.2013, 22:23
  3. PORTx per Parameter an Funktion übergeben
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 06.01.2012, 08:31
  4. Register an Funktion übergeben
    Von EDatabaseError im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 02.11.2008, 15:10
  5. Referenzen, Parameter für TWI-Funktion
    Von Minifriese im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 11.01.2008, 21:54

Berechtigungen

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