Subs, aber richtig

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Subs, aber richtig

      New

      Tach auch,

      durch die letzten Beiträge bin ich darüber gestolpert dass ich die Subroutinen nicht richtig handle. Ja, sie funktionieren, aber wie soll ich es richtig machen? In der Hilfe steht z.B.

      BASCOM Source Code

      1. Declare Sub Test(b1 As Byte , Byval B2 As Byte) 'declare the SUB program
      2. Sub Test(b1 As Byte , Byval B2 As Byte) 'use the same variable names as 'the declared one

      Wenn ich bei der Deklaration schon Byval oder Byref angebe, wozu muss ich das bei der Sub nochmal machen? Es geht auch wenn ich es weg lasse.

      Ebenso steht da: "'use the same variable names as 'the declared one"

      Ich übernehme das gerne mit einem neuen Namen damit die Sub besser verständlich ist für mich.

      BASCOM Source Code

      1. Call Mc_programmieren(pc1_daten , "1" )
      2. Sub Mc_programmieren(nachricht , P_c )
      3. End Sub
      Das funktioniert auch. Ist das falsch?


      Des weiteren irritiert mich der Hinweis "By using CONFIG SUBMODE=NEW, you do not need to DECLARE each sub/function."

      Ich verstehe dass die Deklaration weg fällt und ich natürlich dann beim Aufruf Byval oder Byref angeben muss aber das Wörtchen "NEW" irritiert mich.
      Bedeutet das dass in Zukunft die Subs ohne Deklaration sein werden und ich meine alten Programme umschreiben sollte?

      Wie macht man das dann richtig? übergibt man Byval, Byref beim call? Call Test(b1 As Byte , Byval B2 As Byte)
      oder übernimmt man es bei der Sub? Sub Test(b1 As Byte , Byval B2 As Byte)


      Hab in der Hilfe und in der History.txt gesucht, finde aber keine passende Antwort. Wie machen das die Profis?

      Gruß, Martin
    • New

      Unter 'Declare Subs" findest du die Infos bez. Byval, Byref erklärt.

      Unter "Declare" wird erklärt was es mit dem "Submode = New" auf sich hat.

      Normalerweise verwendet man für Parameter in Subs/Functionen ByVal. Bedeutet, dass von dem zu übergebenden Wert eine Kopie auf den Framesize gelegt wird und dann der Sub/Funktion der Wert auf dem Framesize übergeben wird.

      Wenn du nun in der Sub/Function den Parameter änderst, ändert sich nicht der Original-Wert. Bei Übergabe mit Byref wird keine Kopie auf dem Framesize abgelegt und der originale Wert würde geändert.

      Mit Byref kann man also Subs schreiben, die mehr als ein Wert zurück geben, nämlich über die Parameter.

      Ob ich Profi bin oder nicht, dürfen andere beurteilen. Ich kann nur sagen, wie ich es mache.

      Ich verwende grundsätzlich "Config Submode=New".
      Das hat den Vorteil, dass ich die Doppeldeklaration einmal bei Declare und 1x bei den Sub/Funktions-Koft vermeide.
      Nachteil ist, dass dann der Compiler die Routine zuerst finden muss, bevor sie aufgerufen wird.
      Und da bietet sich wieder die Auslagerung in ein Modul (Include-File) an.