Seite 1 von 2

Warum ist Structure global?

Verfasst: 16.01.2014 20:19
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?

Re: Warum ist Structure global?

Verfasst: 16.01.2014 20:28
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

Re: Warum ist Structure global?

Verfasst: 16.01.2014 20:35
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

;)

Re: Warum ist Structure global?

Verfasst: 16.01.2014 20:40
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.

Re: Warum ist Structure global?

Verfasst: 16.01.2014 20:45
von Derren
Danke, Danilo, hab ich mir schon fast gedacht, ich hinke wirklich hinterher. Alle angefangenen Projekte von mir sind noch 4.x

Re: Warum ist Structure global?

Verfasst: 16.01.2014 20:50
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?

Re: Warum ist Structure global?

Verfasst: 16.01.2014 21:00
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.

Re: Warum ist Structure global?

Verfasst: 16.01.2014 21:22
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.

Re: Warum ist Structure global?

Verfasst: 16.01.2014 21:31
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? <)

Re: Warum ist Structure global?

Verfasst: 16.01.2014 23:07
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.