Ankündigung

Einklappen
Keine Ankündigung bisher.

Compiler

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Compiler

    Liebe Enertexler,

    der Compiler der v4.036 treibt mich immer wieder in den Wahnsinn und Programmieren macht einfach keinen Spaß mehr. Der Compiler ist viel empfindlicher als in der Vergangenheit und die Fehlermeldungen sind im Gegensatz dazu extrem unpräzise und oftmals nicht nachvollziehbar.

    Ich versuche aktuell einen funktionsfähigen Code in ein Makro umzuwandeln. Code der im normalen Programm fehlerfrei durchläuft, läuft im Makro nicht durch. Mal akzeptiert der Compiler die Event() Funktion nicht in Kombination mit einer normalen GA, aber bei Chance() wird die GA akzeptiert. Dann wird eine an das Makro übergebene und existente GA als nicht definiert abgelehnt (! Variable nicht definiert: >GA_Alarm< ! ID:11 EibParser wurde mit Fehler beendet.). Das ist mir inzwischen mehrfach so ergangen und jedes Mal höre ich entnervt auf zu Programmieren.

    #2
    So schwer nachzuvollziehen. Chance() gab es noch nie als Funktion.

    Grundsätzlich: Wenn Code im normalen Programm läuft, sollte er auch mit Makros arbeiten. Bei Makroargumenten muss man (wie schon immer) die Verwendung der "_" vermeiden, da ja diese als Textseparator angesehen werden. Das könnte hier das Problem sein (meint die Glaskugel). Vgl. auch S204 im Handbuch, "Sonderzeichen". Am eibparser wurde von V3 zu V4 am so gut wie nichts (bei den Makros sicher gar nichts) geändert, die GUI baut um diesen herum, damit die alten Programme auch lauffähig bleiben.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      chance() sollte change() heißen.

      Im Makro nutze ich fast immer "_" in Variablen. In dem aktuellen Makro habe ich aber auch im Makro-Aufruf Variablen mit "_" eingesetzt, z.B. GA_Alarm, GA_Testalarm. Da hat offensichtlich einen bunten Blumenstrauß von unterschiedlichen Fehlermeldungen ausgelöst. Erst war es die Fehlermeldung "Leerzeichen nach " (diese gab es aber real nicht), dann löste event(GA_Alarm) die Fehlermeldung "falscher Datentyp in der Event Funktion aus, nach Umstellung auf change(GA_Alarm) kam dann die Fehlermeldung "! Variable nicht definiert: >GA_Alarm< ! ID:11 EibParser wurde mit Fehler beendet."

      Am Ende lag es nun daran, dass ich in den Übergabe GA-Variablen des Makro das "_" eingesetzt habe. Das wird nirgendwo als NoGo beschrieben und die Fehlermeldungen geben auch keinen Hinweis darauf.

      Ich programmiere ja schon fast 10 Jahre mit dem EibPC, aber der Compiler hat sich noch nie so zickig verhalten. Da er in der Vergangenheit deutlich fehlertoleranter war, sind die wenig aussagekräftigen Fehlermeldungen auch deutlich seltener erschienen.

      Ich habe gerade einmal nachgeschaut und mehrere alte Makros mit "_" in den Makro Übergabevariablen gefunden, z.B. :begin Pegelstand(Gewaesser, ID_Pegeluhr, PegelstandStartbedingung). Das war vor v4 nie ein Problem.

      Kommentar


        #4
        Bindestriche akzeptiert der Compiler als Übergabevariablen von Makros auch nicht mehr. Der Einsatz von Variablen wie GA-Alarm führt zur Fehlermeldung "Variable GA nicht definiert". Bitte ergänzt das Handbuch um konkrete Vorgaben und wenn etwas geändert wird sollte das auch per se dokumentiert werden. Die Fehlermeldung treiben eher in den Wahnsinn als das sie irgendwie helfen. Warum kommt hier nicht die Fehlermeldung "Der Einsatz von _ oder - in Makrovariablen ist nicht zulässig"?

        Kommentar


          #5
          Zitat von Jambala Beitrag anzeigen
          Ich habe gerade einmal nachgeschaut und mehrere alte Makros mit "_" in den Makro Übergabevariablen gefunden, z.B. :begin Pegelstand(Gewaesser, ID_Pegeluhr, PegelstandStartbedingung). Das war vor v4 nie ein Problem.
          Der "_" ist im Makro nicht verboten, es gibt Szenarien wo man das "ungewöhnliche" Verhalten ausnutzen kann, z.B. bei rekursiv verwendeten Makros. Im Normalfall raten wir schon immer davon ab (siehe Handbuch, auch in V3 ist der Hinweis so drin). Dass die Fehlermeldungen in diesem Fall nicht immer hilfreich sind, liegt daran, dass der Makroparser die Makros durch Code ersetzt. Der resultierende Code wird erst syntaktisch gecheckt. Wenn die Ersetzungsregeln zusammen mit dem Makro wirren Code verursachen, ist die syntaktische Fehlermeldung entsprechend wenig hilfreich. Sie bezieht sich auf den ersetzen Code und nicht auf den ursprünglichen Code. Wir hatten die Makromöglichkeiten seinerzeit ja sukzessive ausgebaut und dabei trat dieses Problem irgendwann auf. Wenn wir allerdings die Makros nun nur noch ohne "_" erlauben lassen würden, wären alte Makros nicht lauffähig. Wenn wir Warnungen im Compiler ausgeben, dann wären es bei alten Makros so viele, dass es auch nicht hilfreich ist.

          Das war noch nie anders, bzw. der eibparser verhält sich immer schon so. Oder anders gesagt: Wenn die alten Makros in EibStudio V3 liefen, werden die 1:1 auch in EibStudio V4 laufen. Da wette ich gerne :-)) Daher die goldene Regel: Grundsätzlich vermeiden, weil es bessere Fehlermeldungen generiert. Am besten auch die Variablen kapseln (@).

          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar

          Lädt...
          X