var vs. const

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

var vs. const

Beitrag von u-boot »

Folgender Code funktioniert:

Code: Alles auswählen

procedure TTestTrackForm.Button1Click(Sender: TObject);
const C:integer= 17;
begin
  C:=45; 
  Showmessage(inttostr(C));
end;
Frage: Warum meckert da nix und es kompiliert und funktioniert sogar noch, wenn man dem Const eine Zahl zuweist?
Was ist bei einem Integer der Unterschied zwischen const und var in der Deklaration?
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: var vs. const

Beitrag von carli »

Keiner mehr.

Const ist var, sobald du einen Datentyp angibst.
Const ist nur dann konstant, wenn du Sachen machst wie

Code: Alles auswählen

const c = 17;

masc-online
Beiträge: 2
Registriert: Do 23. Dez 2010, 11:45
OS, Lazarus, FPC: Windows 7 (L 0.9.29 FPC 2.4.2)
CPU-Target: 32Bit
Wohnort: L.-E.
Kontaktdaten:

Re: var vs. const

Beitrag von masc-online »

Hallo U-Boot,

mit const bezeichner: typ = wert werden in FreePascal keine typisierten Konstanten wie in Delphi deklariert, sondern vorinitialisierte Variablen. Works as designed - scheinbar aus Kompatibilitätsgründen zu Turbo Pascal. Dies läßt sich aber über das Compiler-Flag {$J-} ändern. Dann nörgelt FreePascal auch bei Deinem Code-Beispiel.

Gruß, Marian
«Sei nie zufrieden, aber immer glücklich, mit dem was du tust!»

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: var vs. const

Beitrag von Socke »

Code: Alles auswählen

const
  MyConst: Longint = 34;
var
  MyVar: Longint = 45;
carli hat geschrieben:Keiner mehr.

Const ist var, sobald du einen Datentyp angibst.
Es gibt einen Unterschied in der Initialisierung. Typisierte Konstanten werden beim Programm-Startup initialisiert (d.h. bei sehr vielen Variablen verzögert braucht das Programm länger bis der programm-spezifische Code ausgeführt wird).
Initialisierte Variablen werden hingegen erst initialisiert, wenn sie verfügbar sind. Bei Globalen Variablen/Konstanten dürfte es daher keinen wirklichen unterschied geben. Lokale typisierte Konstanten werden im Gegensatz zu lokalen initialisierten Variablen auch beim Programm-Startup initialisiert; die Variablen erst, wenn die Funktion/Prozedur aufgerufen wird. (sieh im LangRef).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten