Str in XE7 erzeugt eine seltsame Warnung

8

Warum funktioniert dieser Code?

%Vor%

erzeuge diese Warnung in XE7:

%Vor%

Tom

    
Tom 30.01.2015, 22:07
quelle

1 Antwort

5

System.Str ist eine intrinsische Funktion, die aus einer längst vergangenen Zeit stammt. Die Dokumentation sagt Folgendes:

  

procedure Str (const X [: Breite [: Dezimalzahlen]]; var S: String);

     

....

     

Hinweise : Bei Verwendung dieses Verfahrens kann der Compiler jedoch eine Warnung ausgeben: W1057 Implizite Zeichenfolge von '% s' nach '% s' (Delphi).

     

Wenn eine Zeichenfolge mit einer vordefinierten Mindestlänge nicht benötigt wird, versuchen Sie stattdessen, die IntToStr-Funktion zu verwenden.

Da dies intrinsisch ist, ist wahrscheinlich etwas Besonderes im Spiel. Hinter den Kulissen wird die intrinsische Funktion durch einen Aufruf einer RTL-Unterstützungsfunktion implementiert, die ein ShortString liefert. Compiler magic verwandelt das dann in ein string . Und warnt dich vor der impliziten Konvertierung. Die Compiler-Magie transformiert

%Vor%

in

%Vor%

Wo _Str0Long ist:

%Vor%

Da _Str0Long eine ShortString zurückgibt, muss der Compiler Code generieren, um die implizite Konvertierung von ShortString nach string durchzuführen, wenn er der Variablen s zugewiesen wird. Und natürlich ist es natürlich, dass Sie W1057 sehen.

Die untere Zeile besagt, dass Str nur existiert, um die Kompatibilität mit Pascal ShortString code zu erhalten. Neuer Code sollte nicht Str aufrufen. Sie sollten tun, was die Dokumentation sagt und IntToStr aufrufen:

%Vor%

Oder vielleicht:

%Vor%     
David Heffernan 30.01.2015, 22:45
quelle

Tags und Links