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