Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.078 Beiträge
 
Delphi 12 Athens
 
#23

Re: Lokale Konstanten in D2009 begrenzt?

  Alt 13. Jan 2009, 11:46
Eine QuellCodeZeile kann locker 1000 Zeichen lang sein (genauer gesagt maximal 1024 Zeichen)
Eine Stringkonstante Stringliterale aber nur maximal 255 Zeichen.
Und das ist definitiv so!

x = 'abc' + 'def'
X ist hier erstmal nur ein String aus 2 StringkonstantenStringliteralen,


aber ich hab es gerade mal getestet
diese Längenbegränzungen gibt es immernoch, aber
in Delphi 2009 ist ein Fehler enthalten, denn es wird nur ine Fehlermeldung ausgegeben,
wenn der String genau 256 Zeichen lang ist,
bei mehr gibt es keinen Fehler (es läßt sich problemlos kompilieren), ABER der String ist leer
(sowohl bei lokalen, als auch globalen Konstanten)


Auszug aus Unit1.pas (Ausgabe für D2009 siehe Bilderanhang)
einzelne Stringkonstantenlängen lassen sich via {$DEFINE... deaktivieren

Delphi-Quellcode:
unit Unit1;

interface

...

implementation

{$R *.dfm}

// a = 6 Zeichen
// b = 254 Zeichen
// c = 255 Zeichen
// d = 256 Zeichen hier gibt es immer eine Fehlermeldung
// e = 257 Zeichen ab hier gibts bis D2006 eine Fehlermeldung
// (in D2007 konnte ich nicht testen)
// in D2009 nicht mehr, aber dafür ist der String dort leer
// f = 258 Zeichen
// g = 259 Zeichen
// h = 40.000 Zeichen á 500 Zeichen pro Stringliteral
// i = 40.000 Zeichen á 200 Zeichen pro Stringliteral

{.$DEFINE DDD}  // d
{$DEFINE EFGH}  // e f g h

const a = 'abc' + 'def';

      b = 'a234567890123...01234';
      c = 'b234567890123...012345';
{$IFDEF DDD}
      d = 'c234567890123...0123456';
{$ENDIF}
{$IFDEF EFGH}
      e = 'd234567890123...01234567';
      f = 'e234567890123...012345678';
      g = 'f234567890123...0123456789';

      h = 'aa34567890123...
+
'ba34567890123...
...
        + 'td34567890123...01234567890';
{$ENDIF}
      i = 'ae34567890123...
+
'be34567890123...
...
        + 'tn34567890123...01234567890';

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Caption := Format('a %d', [Length(a)]);
  Label2.Caption := a;

  Label3.Caption := Format('b %d', [Length(b)]);
  Label4.Caption := Format('%s...', [Copy(b, 1, 10)]);
  Label5.Caption := b;

  Label6.Caption := Format('c %d', [Length(c)]);
  Label7.Caption := Format('%s...', [Copy(c, 1, 10)]);
  Label8.Caption := c;

{$IFDEF DDD}
  Label9.Caption := Format('d %d', [Length(d)]);
  Label10.Caption := Format('%s...', [Copy(d, 1, 10)]);
  Label11.Caption := d;
{$ELSE}
  Label9.Caption := 'd (nicht definiert)';
  Label10.Caption := '';
  Label11.Caption := '';
{$ENDIF}

{$IFDEF EFGH}
  Label12.Caption := Format('e %d', [Length(e)]);
  Label13.Caption := Format('%s...', [Copy(e, 1, 10)]);
  Label14.Caption := e;

  Label15.Caption := Format('f %d', [Length(f)]);
  Label16.Caption := Format('%s...', [Copy(f, 1, 10)]);
  Label17.Caption := f;

  Label18.Caption := Format('g %d', [Length(g)]);
  Label19.Caption := Format('%s...', [Copy(g, 1, 10)]);
  Label20.Caption := g;

  Label21.Caption := Format('h %d', [Length(h)]);
  Label22.Caption := Format('%s...', [Copy(h, 1, 10)]);
  Label23.Caption := h;
{$ELSE}
  Label12.Caption := 'e (nicht definiert)';
  Label13.Caption := '';
  Label14.Caption := '';

  Label15.Caption := 'f (nicht definiert)';
  Label16.Caption := '';
  Label17.Caption := '';

  Label18.Caption := 'g (nicht definiert)';
  Label19.Caption := '';
  Label20.Caption := '';

  Label21.Caption := 'h (nicht definiert)';
  Label22.Caption := '';
  Label23.Caption := '';
{$ENDIF}

  Label24.Caption := Format('i %d', [Length(i)]);
  Label25.Caption := Format('%s...', [Copy(i, 1, 10)]);
  Label26.Caption := i;
end;

end.
[add]
bei ResourceStrings mußt du auch aufpassen, denn diese sind ebenfalls begrenzt ... da sie ja in nummerrierten Tabellen liegen und die Anzahl IDs für dieser StringResourceTabellen nicht unbegrenzt ist

[add2]
ok, mit den Namen muß ich aufpassen ... einzelne "Stringliterale" dürfen maximal 255 Zeichen lang sein ... die gesamte Konstante wohl fast unbegrenzt
Miniaturansicht angehängter Grafiken
unbenannt_101.png  
Angehängte Dateien
Dateityp: 7z project1_953.7z (1,9 KB, 0x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat