Deutsch
C ++ Forum

Zeiger

 
- Seite 1 -


Hallo, irgendwie packe ich es mit dem Zeiger nicht von C++(Dev C++).
Es kommt hier der Wert 0 raus, eigentlich wollte ich 45 haben.

Wer kennt sich da aus mit dem Fehler, den ich mit dem Zeiger gemacht habe?

mfg
peter
KompilierenMarkierenSeparieren
declare testram#
dim testram#,100
cls
test()
print byte(testram#,0)
WaitInput
end

proc test

    parameters testram#
    int *a;
    *a=addr(testram#);
    a[0]=45;

endproc

 
13.09.2008  
 



 
- Seite 2 -



Jörg
Sellmeyer
Mach mal print ram#
Vielleicht ist das ja schon der gesuchte Zeiger.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
13.09.2008  
 




Sebastian
König
Ich habe es jetzt nicht getestet, aber

long *pL = (long*)PVAR(ram#);

sollte eigentlich funktionieren...

Nachtrag: Jörgs Hinweis geht in die gleiche Richtung, sehe ich gerade
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.09.2008  
 



Danke euch, jetzt geht es.
Print ram#, da kommt der Zeiger direkt , ohne dem Befehl : addr.

Das ist der C++-Befehl : char* p = reinterpret_cast<char*>(adrr);

Zum Test habe ich die Adresse 44 und 45 ausgegeben.
Es wird der richtige Wert von der Adresse 44 und 45 ausgegeben.
Beide Zeiger fangen bei "0" an.

Puhhh......

mfg
peter
KompilierenMarkierenSeparieren
declare adresse%,ram#
dim ram#,1000
adresse%=ram#
cls
hole()
print byte(ram#,44)
print byte(ram#,45)
WaitInput
end

proc hole

    P2CPP: <INLINE_CPP>
    long adrr;
    adrr=PVAR(adresse%);
    char* p = reinterpret_cast<char*>(adrr);
    p[44]=66;
    p[45]=77;
    P2CPP: </INLINE_CPP>

endproc

 
13.09.2008  
 



Und noch eine For-Schleife in C++.
Hui, die geht ab, 10x 10.000.000.

Kann ich kaum glauben, bestätige das bitte mal.
Ich habe 180ms.
Sebastian kannste die mal Testen, nicht das die Variable mit 10.000.000 falsch durchlaufen wird.

mfg
peter
KompilierenMarkierenSeparieren
 
13.09.2008  
 



long *pL = (long*)PVAR(ram#);

Der Befehl geht nicht .

mfg
peter
 
13.09.2008  
 



Sicher das Du nicht long pL = (long*)PVAR(ram#) meinst? Hab kein prf2cpp zur Hand...
 
13.09.2008  
 



Hab kein prf2cpp zur Hand...

Wird aber Zeit, das es bei dir standard wird diese Wunderwaffe ala C++ mit Profan2ccp.

mfg
peter
 
13.09.2008  
 



long pL = (long*)PVAR(ram#)

Compilerfehler..

Nimm diese Variante : char* pL = reinterpret_cast<char*>( adrr);

mfg
peter
 
13.09.2008  
 




Sebastian
König
Peter Bierbachh
long pL = (long*)PVAR(ram#)

Compilerfehler..

Nimm diese Variante : char* pL = reinterpret_cast<char*>( adrr);


Ok, der reinterpret_cast<>() ist in der Tat die sichere Variante, da die Bereichsvariablen im von Profan2Cpp erzeugten Code zunächst mal kein Zeigertyp (sondern im Grunde einfach long) sind. Manche Compiler meckern dann den alten C-Style Cast mit (long*) an.

Dein Code sieht richtig aus . Natürlich läuft das dann sehr schnell. Für solche Sachen ist Inline-C++ allerdings garnicht notwendig, das der XProfan-Code ja auch nach C++ übersetzt wird. Du kannst zum Beispiel mal dies hier testen:
KompilierenMarkierenSeparieren
declare test%,i%
cls
test%=&GetTickCount

whileloop 1,10,1

    schleife_prf()
    print i%

endwhile

proc schleife_prf

    var zahl% = 0

    whileloop 10000000

        zahl% = zahl% + 1

    endwhile

endproc

Print Str$(Int(&GetTickCount-test%))
WaitInput
end

Wenn ich die Compiler-Optimierungen (mit dem TuneMake-Plug-In  [...]  ) deaktiviere, kann ich keinen Geschwindigkeitsunterschied zu Deiner Variante mit dem Inline-Code mehr feststellen.

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.09.2008  
 



Ok, der reinterpret_cast<>() ist in der Tat die sichere Variante,

Kannst du dafür noch einmal einen Ersatz reinstellen, den dann alle Compiler anerkennen?

mfg
peter
 
14.09.2008  
 



Hier sieht es anders aus.
Eingebaut im Programm als C++ und dann mit Profan2cpp : 143ms Dev C++ und 135ms mit BCC55
Als normales Programm mit Profan2cpp erstellt : 670ms mit DEV c++ und 390ms mit BCC55

mfg
peter
KompilierenMarkierenSeparieren
cls
declare bildxy#,laenge%,test%,z%
dim bildxy#,65000
laenge%=65000
test%=&GetTickCount

whileloop 1,100,1

    z%=rgb_farbe_cpp(bildxy#,laenge%)

endwhile

Print Str$(Int(&GetTickCount-test%))
WaitInput
end

proc rgb_farbe_cpp

    parameters bildxy#,laenge%
    declare r%,g%,b%

    whileloop 0,laenge%-1,4

        b%=byte(bildxy#,&loop)
        g%=byte(bildxy#,&loop+1)
        r%=byte(bildxy#,&loop+2)

        if (b%>252) | (g%>252) | (r%>252)

            z%=255
            break

        endif

    endwhile

ENDPROC

 
14.09.2008  
 




Sebastian
König
Peter Bierbachh
Ok, der reinterpret_cast<>() ist in der Tat die sichere Variante,

Kannst du dafür noch einmal einen Ersatz reinstellen, den dann alle Compiler anerkennen?


Der reinterpret_cast<>() sollte eigentlich von allen Compilern erkannt werden - er ist Teil des Standard-C++ Sprachumfangs.... Was genau funktioniert denn nicht? Generell gilt, dass man sich bei Inline-C++ ganz einfach an das halten muss, was der verwendete Compiler unterstützt. Ich kann nur beim Übersetzen des XProfan-Codes sicherstellen, dass das Ergebnis mit allen unterstützten Compilern läuft.

Peter Bierbach
Hier sieht es anders aus.
Eingebaut im Programm als C++ und dann mit Profan2cpp : 143ms Dev C++ und 135ms mit BCC55
Als normales Programm mit Profan2cpp erstellt : 670ms mit DEV c++ und 390ms mit BCC55


Ok, dann kommt es wohl auch auf den Einzelfall an. Inline-C++ ist natürlich praktisch für sehr geschwindigkeitskritische Dinge - ähnlich wie Inline-ASM in C++. Letzteres ginge übrigens auch innerhalb des INLINE_CPP-Blocks, aber ich arbeite zur Zeit auch an einer direkten Unterstützung von Franks XPIA in Profan2Cpp .

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
14.09.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.608 Betrachtungen

Unbenanntvor 0 min.
funkheld17.12.2013
H.Hackl22.03.2012

Themeninformationen



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