Deutsch
Forum

Erledigt: Array - Deklaration

 

Stephan
Sonneborn
Hallo iF,
ich hab da mal ne Frage:
In meinem Programm habe ich eine Start-Prozedur, in der einige Werte aus einer INI-Datei ausgelesen und einigen globalen Variablen Werte zugewiesen werden.
Unter anderem findet sich der Eintrag
KompilierenMarkierenSeparieren
Max_Punkte%  = VAL(READINI$(INIFile$, OPTIONS, MaxShapePoints))

Die Variable ist selbstverständlich global deklariert.

In verschiedenen Prozeduren wird das globale Feld
KompilierenMarkierenSeparieren
Data![x%,y%]
ausgewertet, das zuvor nicht deklariert wurde.
Im weiteren Programmverlauf wird zunächst die Start-Prozedur aufgerufen und der Variablen
KompilierenMarkierenSeparieren
Max_Punkte%
ein Wert zugewiesen. Danach kommt auf der Hauptprogrammebene die Variablendeklaration
KompilierenMarkierenSeparieren
DECLARE Data![Max_Punkte%,5]
und die Prozeduren, die das Array behandeln, werden aufgerufen.
Der Interpreter hat kein Problem damit, der XPSE jedoch schon, denn der meckert, die Variable Data! sei nicht deklariert.
Wieso?

Da das ganze ja ziemlich umständlich zu erklären ist, hier ein Beispiel:
KompilierenMarkierenSeparieren
 {$cleq}
DECLARE Max_Punkte%

PROC Start

    Max_Punkte% = 5

ENDPROC

PROC Werte

    Data![1,1] = 123.456

ENDPROC

CLS
Start
DECLARE Data![Max_Punkte%,2]
Werte
PRINT Data![1,1]
WAITINPUT
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
23.03.2009  
 



Kurz gesagt weil XPSE immer lieber einen Fehler unterstellt, als einen durchgehen zu lassen.

Solch Deklarationen (imho egal ob global oder local) sollten vor dem Programmablauf passieren, ausgenommen natürlich die Deklarationen welche extra dafür geschaffen sind - wie z.B. diese per Var.

Das hat auch etwas mit Includes und Units zu tun, in denen nunmal nicht nur Funktionen deklariert sein müssen sondern Programmteile gleich ausgeführt werden können.

XProfan selbst interpretiert den Code und sieht diesen in Ablaufreihenfolge - diesen Luxus kann man nur sehr begrenzt ohne echtes Ausführen emulieren - wohlbemerkt es imho sogar schädlich sein kann auch wegen der Übersicht eines Quellcodes.

Natürlich müsste XPSE hier nicht unbedingt warnen - besonders da es ja funktioniert.

Gegenargumentieren könnte man mit Du wirst aus Versehen, wenn Du schon das Deklare mitten im Code hast, über dieser Deklaration auf diese Variable zugreifen - was dann knallt. oder auch Nur weil es in XProfan funktioniert heisst dies noch lange nicht, dass es auch für alle weiteren Versionen unterstützt ist - besonders wenn nicht explizit erwähnt ist, dass es eben funktioniert.

Naja, und weil XPSE eben nicht riechen kann, welche Zeile tatsächlich WANN ausgeführt wird, und weil es eben keinen Nachteil bedeutet ein Declare auch im Kopf anzuwenden, warnt er lieber.

Ist eigentlich das Deklarieren von statischen Arrays per Declare in dynamischer Grösse erlaubt? (Ich dachte immer hier wären nur Konstanten erlaubt was dieses Anwarnen handfester machen würde. (imho hatte ich es _auch deshalb so gehandhabt))
 
23.03.2009  
 




RGH
iF
Ist eigentlich das Deklarieren von statischen Arrays per Declare in dynamischer Grösse erlaubt?


Ja! Und in diesem Fall kann das DECLARE natürlich erst dann im Code stehen, nachdem die Größe des Arrays ermittelt wurde.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
23.03.2009  
 



Jupp, ist dann auch klar...

Werde ich korrigieren! (wenn wieder im Lande, sollte diese Woche noch was werden)
 
23.03.2009  
 



RGH

iF
Ist eigentlich das Deklarieren von statischen Arrays per Declare in dynamischer Grösse erlaubt?


Ja! Und in diesem Fall kann das DECLARE natürlich erst dann im Code stehen, nachdem die Größe des Arrays ermittelt wurde.

Gruß
Roland


Hm?
KompilierenMarkierenSeparieren
Hierbei steht zwar vom Ablauf her die Funktion auch über der Deklaration, aber...
 
23.03.2009  
 




Stephan
Sonneborn
RGH

iF
Ist eigentlich das Deklarieren von statischen Arrays per Declare in dynamischer Grösse erlaubt?


Ja! Und in diesem Fall kann das DECLARE natürlich erst dann im Code stehen, nachdem die Größe des Arrays ermittelt wurde.

Gruß
Roland


Hallo Roland, hallo David,

danke für Eure raschen Antworten!

Ich hatte als Workaround erst mal das Array statisch am Programmanfang gesetzt, um den XPSE nutzen zu können. Aber nun stelle ichs wieder da hin, wo es ursprünglich war und werde einfach mal warten, was ein evtl. Update vom XPSE bringt...

BTW: Nach gut zwei Jahren ohne XProfan - Programmierung (wegen Hausumbau etc.) machts echt wieder riesigen Spaß!!!
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
24.03.2009  
 



Stephan Sonneborn
BTW: Nach gut zwei Jahren ohne XProfan - Programmierung (wegen Hausumbau etc.) machts echt wieder riesigen Spaß!!!


So geht das aber nicht!
 
24.03.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.547 Betrachtungen

Unbenanntvor 0 min.
p.specht10.01.2018
Georg Teles13.02.2016
GDL24.08.2015
Richi14.11.2013

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

iF (4x)
Stephan Sonneborn (2x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie