Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [GELÖST] Compilerschalter $J+ ohne Funktion? (https://www.delphipraxis.net/214822-%5Bgeloest%5D-compilerschalter-%24j-ohne-funktion.html)

Frickler 15. Mär 2024 08:21


[GELÖST] Compilerschalter $J+ ohne Funktion?
 
Zuweisbare typisierte Konstanten funktionieren hier nur, wenn ich das in den Projektoptionen setze. {$J+} oder {$WRITEABLECONST ON} im Quelltext hat überhaupt keine Auswirkung. Getestet in Delphi XE6 und 10.2. Was mache ich falsch?

Der schöne Günther 15. Mär 2024 08:35

AW: Compilerschalter $J+ ohne Funktion?
 
Die Konstante muss typisiert sein, also nicht
Delphi-Quellcode:
const number = 42
, sondern
Delphi-Quellcode:
const number: Byte = 42
Die Konstante darf nicht inline sein, sondern muss (wie früher) vor dem
Delphi-Quellcode:
begin
des Blocks deklariert worden sein.

Hier ein Beispiel das funktioniert:

Delphi-Quellcode:
program Project1;

{$WRITEABLECONST ON}
const
   number: Byte = 42;
begin
   number := 99;
end.

Frickler 15. Mär 2024 08:50

AW: Compilerschalter $J+ ohne Funktion?
 
Danke.

Ich hatte den Schalter an der falschen Stelle gesetzt... :oops:

himitsu 15. Mär 2024 08:58

AW: [GELÖST] Compilerschalter $J+ ohne Funktion?
 
Wo?

In einer anderen Unit?

In Units sollte er "eigentlich" von der Deklaration, bis zum Unit-Ende funktionieren, also sobald er vor/über dem VAR steht.





Bezüglich Schaltern für Warnungen und Fehlerprüfung, hatte ich es aber auch schon, dass man Diese nicht zu nah definieren sollte.
Delphi-Quellcode:
if irgendwas then
  {$xyz on}
  machwas
  {$xyz off}
  ;
Hier ist es schon passiert, dass das OFF bereits angewendet, bevor machwas ausgeführt wurde. :freak:

Frickler 15. Mär 2024 09:49

AW: [GELÖST] Compilerschalter $J+ ohne Funktion?
 
Zitat:

Zitat von himitsu (Beitrag 1534683)
Wo?

Code:
procedure Bla;
const test: string = 'nein';
begin
  {$J+}
  test := 'ja';
  {$J-}
end;

himitsu 15. Mär 2024 09:58

AW: [GELÖST] Compilerschalter $J+ ohne Funktion?
 
{$J} betrifft die Deklaration der Konstante, nicht die Nutzung.
Delphi-Quellcode:
procedure Bla;
{$J+}
const test: string = 'nein';
{$J-}
begin
  test := 'ja';
end;
Allerdings :duck:
Delphi-Quellcode:
var test: string = 'nein';
procedure Bla;
begin
  test := 'ja';
end;
Aber z.B. als Inline läuft das {$J} nicht so, wie man es sich denkt,
obwohl Variablen und Konstanten seit Delphi 10.3 per se sowas können.
Delphi-Quellcode:
procedure Bla;
begin
  {$J+}
  const test: string = 'nein';
  {$J-}
  test := 'ja';
end;
Wobei {$J+} hier garkeinen Einfluß hat, egal wo deklariert ... nichtmal als Parameter -J+ für den Compiler .


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 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