Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[Erledigt] Makro

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 05.07.2009, 15:12    Titel: [Erledigt] Makro Antworten mit Zitat

Da ich eine einfache Implementierung von Einfach-Verketteten-Listen für verschiedene Datentypen benötige, will ich nun ein Makro erstellen, damit ich den Code nicht jedes Mal kopieren muss.

Code:
#macro LL_Add(Datentyp, Grundtyp, Parameter)
   dim Anzahl as Integer
   dim ElementA as Datentyp ptr
   dim ElementB as Datentyp ptr
   dim q as integer
   dim tmpIndex as Integer
   Anzahl = this.##Grundtyp##Count()
   ElementA = new Datentyp(Parameter)
   if Anzahl = 0 then
      this._##Grundtyp = ElementA
      ElementA->_next = 0
      return 0
   else
      if index < 0 or index > Anzahl then tmpIndex = Anzahl else tmpIndex = index
      ElementB = this._##Grundtyp
      for q = 1 to tmpIndex-1
         ElementB = ElementB->_next
      next
      if tmpIndex = 0 then
         ElementA->_next = this._##Grundtyp
         this._##Grundtyp = ElementA
      else
         ElementA->_next = ElementB->_next
         ElementB->_next = ElementA
      EndIf
   EndIf
   return 0
#endmacro


Dabei bin ich (unter anderen) auf folgendes Problem gestoßen:
Ich möchte eine Parameterliste als Parameter an das Makro übergeben. In dieser Zeichenkette kommen Beistriche vor. Wie kann ich diese übergeben? (ohne Anführungszeichen am Anfang und Ende hinzuzufügen)

Code:
error 89: No matching overloaded function, LYRICS3BILD.constructor(byref as string, byref as string, byref as string) in 'LL_Add(Lyrics3Bild,Bild,BildDatei)'
Element not defined, ElementA in 'LL_Add(Lyrics3Bild,Bild,BildDatei)'
Element not defined, for in 'LL_Add(Lyrics3Bild,Bild,BildDatei)'
warning 12(0): Implicit variable allocation, q
warning 4(1): Suspicious pointer assignment
error 33: Expected 'END IF' in 'LL_Add(Lyrics3Bild,Bild,BildDatei)'
Element not defined, this in 'LL_Add(Lyrics3Bild,Bild,BildDatei)'


Ich habe bis jetzt noch keine Makros verwendet. Ist es ungefähr richtig, so wie ich es obig versucht habe? Gibt es eine bessere Lösung als Markos für meine Problemstellung?

Kann man sich anzeigen lassen, wie der Compiler die Makros expandiert?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)


Zuletzt bearbeitet von St_W am 05.07.2009, 20:06, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 05.07.2009, 20:05    Titel: Antworten mit Zitat

Erledigt.

(Falls es jemanden interessiert: http://www.freebasic.net/forum/viewtopic.php?p=122381 (englisch)
Das das Makro nicht funktioniert hängt mit einem Bug des FBC im Zusammenhang mit einfachen Unterstrichen am Ende von Bezeichnern zusammen. Eine Liste kann man eingeklammert z.B. mit (a,b,c,d) übergeben)
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz