Ankündigung

Einklappen
Keine Ankündigung bisher.

Compilerfehler bei Kommentaren

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

    Compilerfehler bei Kommentaren

    Hallo zusammen,

    ich habe gerade einen Compilerbug nachvollziehen können, der mich schon einige Tage beschäftigt.
    Bei folgendem Code wird die if-Anweisung nicht ausgeführt, obwohl sie eigentlich sollte:
    [highlight=epc]
    //if ("Eingang Dämmerung-4/3/0" < 35.0 and !systemstart() and chtime(12,00,00)) then \\
    //if ("Eingang Dämmerung-4/3/0" < 20.0 and !systemstart() and chtime(12,00,00)) then \\
    if ("Eingang Dämmerung-4/3/0" < 45.0 and !systemstart() and chtime(12,00,00)) then {
    ...
    } endif
    [/highlight]

    Der Code funktioniert wenn unter dem Kommentar eine Leerzeile eingefügt wird:
    [highlight=epc]
    //if ("Eingang Dämmerung-4/3/0" < 35.0 and !systemstart() and chtime(12,00,00)) then \\
    //if ("Eingang Dämmerung-4/3/0" < 20.0 and !systemstart() and chtime(12,00,00)) then \\

    if ("Eingang Dämmerung-4/3/0" < 45.0 and !systemstart() and chtime(12,00,00)) then {
    ...
    } endif
    [/highlight]

    oder wenn die "\\" am Ende des letzten Kommentars entfernt werden.

    [highlight=epc]
    //if ("Eingang Dämmerung-4/3/0" < 35.0 and !systemstart() and chtime(12,00,00)) then \\
    //if ("Eingang Dämmerung-4/3/0" < 20.0 and !systemstart() and chtime(12,00,00)) then
    if ("Eingang Dämmerung-4/3/0" < 45.0 and !systemstart() and chtime(12,00,00)) then {
    ...
    } endif
    [/highlight]

    Die beiden "\\" am Ende der letzten Kommentarzeile scheinen den Kommentar auf die nachfolgende If-Anweisung auszudehnen. Kann das jemand nachvollziehen?

    VG,
    Boris.

    #2
    Zitat von kuczerek Beitrag anzeigen
    Die beiden "\\" am Ende der letzten Kommentarzeile scheinen den Kommentar auf die nachfolgende If-Anweisung auszudehnen. Kann das jemand nachvollziehen?
    Ja, das ist so und m.E. auch logisch. Die Zeichen bedeuten ja, dass die Anweisung auf die nächste Zeile bezogen wird. Zum Kommentieren: Da wird es ja wie bereits angekündigt in der nächsten Version weit bequemer.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Zitat von enertegus Beitrag anzeigen
      Ja, das ist so und m.E. auch logisch. Die Zeichen bedeuten ja, dass die Anweisung auf die nächste Zeile bezogen wird.
      Naja, die Kommentarzeichen bedeuten aber eben auch, dass die Zeile AUSKOMMENTIERT ist, also sämtliche Anweisungen in der Zeile vom Compiler ignoriert werden. So kennt man das ja auch aus anderen Programmiersprachen. Kommentar ist halt Kommentar.

      Kommentar


        #4
        Zitat von kuczerek Beitrag anzeigen
        Naja, die Kommentarzeichen bedeuten aber eben auch, dass die Zeile AUSKOMMENTIERT ist, also sämtliche Anweisungen in der Zeile vom Compiler ignoriert werden.
        Ich habe es auch so erlebt/gelernt/mir eingebildet, dass die Zeilenenden da anders behandelt werden. Theoretisch könnte ich das ändern (fällt in meine Zuständigkeit), was ich aber eher nicht machen wollte, zwecks der Kompatibilität.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Ich fände eine Änderung sinnvoll, denn:
          Ich habe es so erlebt/gelernt/mir eingebildet, dass "//" ab dem Auftreten den Rests der Zeile - nicht mehr aber auch nicht weniger - zum Kommentar erklärt und der Compiler mit der nächsten Zeile - also nach dem nächsten Zeilenumbruch im Text - weitermacht.

          Ich denke mal, das "Problem" hier ist, das "\\" noch vor allem anderen ausgewertet/verarbeitet/ersetzt wird, so das der eigentliche Compilevorgang statt dessen eine lange Zeile sieht, und deren Rest soll ja ab "//" ignoriert werden...

          Nun werden aber die meisten Sprachen, die "//" als Zeilenkommentar verwenden, nicht zeilenweise interpretiert, daher gibt es dort nichts, was dem "\\" hier entspricht, weil man es schlicht nicht braucht. In diesen Sprachen endet ein mit "//" eingeleiteter Kommentar unbedingt am "physikalischen" Ende der Zeile (also beim nächsten Zeilenumbruch im Text), egal was da im Rest steht.

          Und genau dieses Verhalten erwarten sicherlich alle Nutzer, die schon irgendwie Programmiererfahrung abseits des EibPCs gesammelt haben.
          Ich glaube, niemand hätte bis zur Feststellung des Gegenteils je erwartet, das "\\" eine höherer Priorität hat, als "//", eben weil "//" in anderen Sprachen den Rest der Zeile bis zum Umbruch selbst vor dem Compiler "versteckt", inklusive des "\\". Auch jeden "Neuzugang" im EibPC-Lager wird das irritieren, zumindest, wenn er schon vorher programmiert hat. Daher fände ich eine Änderung sinnvoll.

          Was da die Kompatibilität angeht, ich glaube ja nicht, das irgend jemand bisher einen Zeilenkommentar mit "\\" abgeschlossen hat, um ihn in der folgenden Zeile weitergehen zu lassen, aber wenn Ihr da besorgt seid, können wir da ja mal eine Umfrage machen, ob das tatsächlich jemand mal willentlich so verwendet hat...
          Dafür glaube ich aber, das schon so mancher hier wie auch kuczerek schon darauf "hereingefallen" ist, das resultierende Fehlverhalten aber nicht so eindeutigl der Kombination aus "//" und "\\" zuordnen konnte (und es daher nicht gemeldet hat).

          Abgesehen davon war es bislang meisten so, das wenn man einen Compilerbug vorsätzlich ohne Not*) ausgenutzt hat, man immer damit rechnen musste, das er eines Tages korrigiert wird, und man dann Anpassen musste.

          *) Bedeutet: Man hat ihn benutzt obwohl es offiziell einen anderen Weg gab, der auch funktionierte, während der Bug offensichtlich ein von der Spezifikation abweichendes Verhalten zeigte.

          PS:
          Ich weiß ja, das der EibPC in vielem anders als "normale" Programmiersprachen ist und somit auch hier eben anders sein kann/darf.
          Aber hier gibt es meiner Meinung nach keinen Nutzen durch dieses Verhalten. Ein Zeilenkommentar endet nun einmal am Ende der Textzeile, das ist da, wo der Editor optisch die Darstellung beendet um sie in der nächsten optischen Zeile fortzusetzen, egal wie das nun der Compiler zu sehen meint. Wer mehrzeilige Kommentare möchte hat ja auch beim EibPC dafür das "Klammerpaar" "/*" und "*/" und damit einen offiziellen Weg so das der "Bug" nicht benutzt werden muss und daher verschwinden kann.
          Tessi

          Kommentar

          Lädt...
          X