Warum ist Structure global?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Warum ist Structure global?

Beitrag von Tommy »

Warum ist Structure global?
Variablen, Maps, Listen usw. kann man entweder global, lokal oder innerhalb einer Procedure definieren. Aus welchen Grund ist es mit Structuren nicht möglich? Warum sind die immer global? Protectedete Strukturen wären auch sinnvoll oder?
Zuletzt geändert von Tommy am 27.01.2015 11:24, insgesamt 2-mal geändert.
PB 5.41 x64
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Warum ist Structure global?

Beitrag von Derren »

Wäre eventuell sinnvoll für Includes, ja.
Allerdings muss die Struktur ja nur einmal definiert werden, von daher sind Namenszusätze nicht allzu schlimm.

Code: Alles auswählen

Structure StructureThatHasAReallyLongNameToMakeItUnique_MyPoint
  a.i
  b.i
EndStructure

Procedure MyFunctionThatAlsoHasAPrefixToMakeItUnique_Do(a.i, b.i)
  Protected myVar.StructureThatHasAReallyLongNameToMakeItUnique_MyPoint

  myVar\a = a
  myVar\b = b
EndProcedure
Signatur und so
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Warum ist Structure global?

Beitrag von Danilo »

Derren hat geschrieben:Wäre eventuell sinnvoll für Includes, ja.

Code: Alles auswählen

DeclareModule Derren
    
    Structure MyPoint
        a.i
        b.i
    EndStructure
    
    Declare Do(a.i, b.i)
    
EndDeclareModule

Module Derren
    Procedure Do(a.i, b.i)
        Protected myVar.MyPoint
        
        myVar\a = a
        myVar\b = b
    EndProcedure
EndModule


Derren::Do(1,2)

Define struct.Derren::MyPoint
struct\a = 5
struct\b = 6

;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Warum ist Structure global?

Beitrag von STARGÅTE »

Tommy hat geschrieben:Warum ist Structure global?

Variablen, Maps, Listen usw. kann man entweder global, lokal oder innerhalb einer Procedure definieren. Aus welchen Grund ist es mit Structuren nicht möglich? Warum sind die immer global? Protectedete Strukturen wären auch sinnvoll oder?
Strukturen sind keine dynamischen Objekte wie Variablen, Listen usw.
In der EXE steht später keine Strukturen mehr, weil die Felder (also deren Offsets zum Zeiger) direkt in ASM eingebaut werden.

Damit du überscheidungen vermeiden kannst, weil deine Strukturnamen nicht besonders sind, kannst du die neuen Module nehmen, die dann einen lokalen Gültigkeitsbereich besitzen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Warum ist Structure global?

Beitrag von Derren »

Danke, Danilo, hab ich mir schon fast gedacht, ich hinke wirklich hinterher. Alle angefangenen Projekte von mir sind noch 4.x
Signatur und so
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Warum ist Structure global?

Beitrag von Tommy »

Danke für eure Hilfe! Die Structure in eine Module zu packen ist eine gute Idee! Danke dafür!
STARGÅTE: Aso. Du sagst das die Felder mit deren Offsets zum zeiger direkt in asm eingebaut werden aber was passiert bei Modulen? Werden die Felder dupliziert je Module mit anderen Structurnamen und danach direkt in ASM eingebaut?
Zuletzt geändert von Tommy am 27.01.2015 11:24, insgesamt 2-mal geändert.
PB 5.41 x64
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: Warum ist Structure global?

Beitrag von ts-soft »

Structuren sind lediglich CompilerAnweisungen, nach der Compilierung sind sie, genauso wie Prototypes oder Konstanten,
nicht mehr existent. Bei Modulen kennt der Compiler diese Anweisungen nur innerhalb des Modules und verwirft sie anschließend.
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
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Warum ist Structure global?

Beitrag von Derren »

Ja gut. Aber Prozeduren sind auch nur Goto-Anweisungen. Und Variablennamen existieren auch nur als Pointer auf einen Speicherbereich, d.h. im ASM Code gibt es auch keine lokalen oder globalen Variablen mehr. Was der Compiler daraus macht ist mir eigentlich relativ wurscht.
Deswegen sollten diese Erklärungen auch nur als solche verstanden werden, und nicht als Argument gegen lokale Strukturen.
Signatur und so
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: Warum ist Structure global?

Beitrag von ts-soft »

Variablen können Lokal, Global usw. sein, auch strukturierte, die Compileranweisungen nur eingeschränkt in Modulen.
Da Compileranweisungen nach der Compilierung nicht mehr existent sind, spielt das meist auch keine Rolle.
Besser so? <)
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
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Warum ist Structure global?

Beitrag von NicTheQuick »

Därrän hat geschrieben:Ja gut. Aber Prozeduren sind auch nur Goto-Anweisungen.
Wenn dem so wäre, dann könnte man nicht rekursiv Funktionen aufrufen und dann gäbe es auch nicht in jeder Rekursion einen neuen Heap für die lokalen Variablen.
Antworten