AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Konstante oder nicht Konstante, das ist hier die Frage.

Konstante oder nicht Konstante, das ist hier die Frage.

Ein Thema von Corpsman · begonnen am 19. Jan 2009 · letzter Beitrag vom 20. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#1

Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:06
Hi Leutz,

ich hör da grad ne Vorlesung zu Compilerbau und Programmanalysen, und da hat der Prof. doch was interessantes gesagt.

Schaut euch dieses Code stück an und überlegt euch die Antworten bevor ihr es ausprobiert .

Delphi-Quellcode:
const blub:integer = 10;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
type p = ^integer;
var i : P;
begin
  i := @blub;
  i^ := 5;
  showmessage(inttostr(blub));
end;
Kann dieser Code Compiliert werden ?

Wenn ja was zeigt die Messagebox ?
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:08
Klar, das geht, MsgBox gibt dann "5" aus

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:10
Zitat von mirage228:
Klar, das geht, MsgBox gibt dann "5" aus
Anders gesagt: Es hätte mich überrascht, wenn es anders wäre
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:13
Also, ich habe überlegt und dann natürlich versucht, ich wäre durch Denke auf den Wert 10 in der Message gekommen.
Ich muss allerdings zugeben, das ich das Ergebnis 5 nicht richtig nachvollziehen kann.

Vieleicht erläutert es ja einer von Euch.

MFG

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:16
Es wird ja direkt der Speicher, in dem blub steht, manipuliert. Das kann der Compiler nicht erkennen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:17
Zitat von Jens Hartmann:
Vieleicht erläutert es ja einer von Euch.
Es wird ein Zeiger auf die "Konstante" in einer neuen Variable(!) erzeugt (i := @blub). So kann man direkt den Speicherbereich der Konstanten verändern, ohne dass der Compiler "erkennt", dass wir versuchen "blub" zu verändern und das mit einem Syntaxfehler (bei {J-}-Option) quittieren würde.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 18:58
Also so richtig nicht, Ihr könnt ja von mir denken was Ihr wollt, Aber mich interesiert es schon wie es Funktioniert und ich habe es leider noch nicht so richtig verstanden.

Verstanden habe ich lediglich das die Var Blub geändert wird, aber wie noch nicht.

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 19:06
Hi!

Es geht darum, dass man quasi hintenrum eine Konstante verändert. Würde man das auf direktem Wege versuchen, so würde der Compiler meckern, da es ja eine Konstante ist. Mit dem anderen Weg verändert man direkt im Speicher den Wert im Speicher - das kann der Compiler weder merken noch anmeckern...


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 19:46
Da es sich hier nicht wirklich um eine Konstante handelt geht es. Das Wörtchen const täuscht hier ein wenig.
Sobald in Delphi eine Constante typisiert ist, ist es letzendlich nichts anderes als eine Variable die geringfügig geschützt wird durch den Compiler. Hat man hingegen eine untypisierte Konstante wird diese beim kompilieren durch den Wert an den entsprechenden Stellen ersetzt.
Sprich: eine typisierte Konstante ist per Default (Compilereinstellungen) nichts anderes als eine Variable die man nicht ganz so einfach ändern kann.

[Edit]: Bei einer echten Konstante (untypisiert) würde obiges Beispiel auch nicht kompilieren weil zuvor der Konstantenname durch die Konstante ersetzt werden würde und somit würde für den Compiler folgendes dabei heraus kommen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
type p = ^integer;
var i : P;
begin
  i := @10; //blup wird durch 10 ersetzt und von 10 die Adresse geht nicht weil 10 keine Variable oder dergleichen ist
  i^ := 5;
  showmessage(inttostr(10));
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Konstante oder nicht Konstante, das ist hier die Frage.

  Alt 19. Jan 2009, 19:54
Jens hat es auf den Punkt gebracht.

Delphi-Quellcode:
const a = 10;
var
  i : ^integer;
begin
  i := @a;
  i^ := 5;
  ShowMessage(IntToStr(a));
end;
Meckert der Compiler mit einem Fehler:
[Fehler] Unit1.pas(31): Variable erforderlich
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz