Parameterübergabe an Prozeduren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Parameterübergabe an Prozeduren

Beitrag von ProgOldie »

Ich würde es ja gleich mit einer großen Struktur machen. Es sei denn, dass ist nicht so gedacht.
Doch, es war genauso gedacht. Ich wollte nur vorab an einem einfachen Beispiel die Parameterübergabe mit Referenz verstehen.
Im Übrigen ist die Struktur eine feine Sache: Es bleibt zusammen, was zusammengehört.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Parameterübergabe an Prozeduren

Beitrag von GPI »

man-in-black hat geschrieben:

Code: Alles auswählen

Define x.i,y.s,z.i

Procedure test(*a,*b,*c)
  PokeI(*a,15)
  PokeS(*b,"Teststring")
  PokeI(*c,19)
EndProcedure
Um himmels willen, nicht einfach irgendwohin was "Poke"n - schon gar nicht strings. Strings haben eine größe. Wenn der Ursprungsstring bei *B kleiner ist als das was du "poke"st, dann schreibst du wild in Speicher rum! Selbst bei "*b.string" hätte ich bauchschmerzen beim Schreiben. Die beste Lösung ist imo die von NIC. Es ist auch weniger Fehleranfälliger (vergessen von @ oder feste werte Test(10,30,40) - erzeugt einen ausführbaren Code in Beispiel oben)
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Parameterübergabe an Prozeduren

Beitrag von ts-soft »

Selbst bei "*b.string" hätte ich bauchschmerzen beim Schreiben.
Brauchste aber nicht, hier wirkt der Stringmanager von PB!

Aber beim Code von man-in-black haste natürlich recht. Kann man auch selber testen, einfach mal den Purefier anschalten. Pokes
in nicht allocierten Speicher sind immer gefährlich :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Parameterübergabe an Prozeduren

Beitrag von mk-soft »

Wie Demivec geschrieben hat muss ein String ByRef immer ein Strukturtype sein (*Text.String). Anders führt es sonst zum Speicherleck.

oder wie bei API

Code: Alles auswählen

Procedure foo(*text, len)
  Protected sTemp.s
  
  sTemp = "Hello World!"
  PokeS(*text, sTemp, Len) 
  
EndProcedure

len = 6
t1.s = Space(len)
foo(@t1, len)
Debug t1
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Parameterübergabe an Prozeduren

Beitrag von man-in-black »

Aber beim Code von man-in-black haste natürlich recht. Kann man auch selber testen, einfach mal den Purefier anschalten. Pokes
in nicht allocierten Speicher sind immer gefährlich
Ging auch nur um die Logik dahinter. Aber ja, vielleicht sollte ich aufpassen, was ich schreibe :D

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Antworten