Difference between revisions of "@/fr"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{@}} <div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">@</div> L'op...")
 
(Use pascal highlighter)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{@}}
 
{{@}}
 +
<br>
  
 
<div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">@</div>
 
<div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">@</div>
  
L'opérateur d'adessage @ retourne l'adresse d'une [[variable/fr|variable]], d'une [[Procedure/fr|Procedure]] ou d'une [[Function|fonction]].
+
 
 +
 
 +
 
 +
L'opérateur d'adessage @ retourne l'adresse d'une [[variable/fr|variable]], d'une [[Procedure/fr|procédure]] ou d'une [[Function|fonction]].
 +
 
 +
 
 +
 
 +
 
 +
 
 +
L'opérateur d'adresse @ renvoie l'adresse d'un identifiant associé à une adresse (généralement une variable ou une routine, mais aussi une étiquette).
 +
 
 +
Normalement, la valeur que @ renvoie est un pointeur non typé. Si vous gérez beaucoup de pointeurs et que vous souhaitez atténuer les problèmes de transmission de références de cible de type incorrect, vous devez utiliser la directive {$ typedaddress on}.
 +
 
 +
Voici un exemple qui démontre ce qui produit avec des pointeurs non typés, du code valide et fonctionnel, mais qui génère sémantiquement un résultat erroné:
 +
 
 +
<syntaxhighlight lang=pascal>
 +
program untypedAddressDemo(input, output, stderr);
 +
 
 +
  procedure incrementIntByRef(const ref: PByte);
 +
    begin
 +
      inc(ref^);
 +
    end;
 +
  var
 +
    foo: integer;
 +
  begin
 +
    foo := -1;
 +
    incrementIntByRef(@foo);
 +
    writeLn(foo);
 +
  end.
 +
</syntaxhighlight>
 +
 
 +
Il était prévu d'obtenir 0 (zéro), mais le programme renvoie -256 à la place. Avec {$ typedaddress on}, la compilation échoue avec une erreur de type incompatible. Vous attendez généralement ce dernier comportement (échec de compilation) au lieu de perdre du temps avec des heures de débogage.
 +
 
 +
Autres remarques
 +
 
 +
    En ASCII, le caractère @ (signe AT): a la valeur 64.
 +
 
  
 
== Read more ==
 
== Read more ==

Latest revision as of 18:17, 25 January 2020

English (en) suomi (fi) français (fr) русский (ru)

@



L'opérateur d'adessage @ retourne l'adresse d'une variable, d'une procédure ou d'une fonction.



L'opérateur d'adresse @ renvoie l'adresse d'un identifiant associé à une adresse (généralement une variable ou une routine, mais aussi une étiquette).

Normalement, la valeur que @ renvoie est un pointeur non typé. Si vous gérez beaucoup de pointeurs et que vous souhaitez atténuer les problèmes de transmission de références de cible de type incorrect, vous devez utiliser la directive {$ typedaddress on}.

Voici un exemple qui démontre ce qui produit avec des pointeurs non typés, du code valide et fonctionnel, mais qui génère sémantiquement un résultat erroné:

program untypedAddressDemo(input, output, stderr);

  procedure incrementIntByRef(const ref: PByte);
    begin
      inc(ref^);
    end;
  var
    foo: integer;
  begin
    foo := -1;
    incrementIntByRef(@foo);
    writeLn(foo);
  end.

Il était prévu d'obtenir 0 (zéro), mais le programme renvoie -256 à la place. Avec {$ typedaddress on}, la compilation échoue avec une erreur de type incompatible. Vous attendez généralement ce dernier comportement (échec de compilation) au lieu de perdre du temps avec des heures de débogage.

Autres remarques

    En ASCII, le caractère @ (signe AT): a la valeur 64.


Read more