Difference between revisions of "$extendedSyntax"
From Lazarus wiki
Jump to navigationJump to search (create) |
(remove wrong statement) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Template:{{BASEPAGENAME}}}} | ||
The [[global compiler directives|global compiler directive]] <syntaxhighlight lang="pascal" inline>{$extendedSyntax on}</syntaxhighlight> turns on additional syntax. | The [[global compiler directives|global compiler directive]] <syntaxhighlight lang="pascal" inline>{$extendedSyntax on}</syntaxhighlight> turns on additional syntax. | ||
The [[FPC]] has this by default ''on''. | The [[FPC]] has this by default ''on''. | ||
The short notation is <syntaxhighlight lang="pascal" inline>{$X+}</syntaxhighlight>/<syntaxhighlight lang="pascal" inline>{$X‑}</syntaxhighlight>. | The short notation is <syntaxhighlight lang="pascal" inline>{$X+}</syntaxhighlight>/<syntaxhighlight lang="pascal" inline>{$X‑}</syntaxhighlight>. | ||
− | == | + | == Affected syntax == |
− | * [[Function|Functions]] can be called as if they were [[Procedure|procedures]]. The function result is discarded. This is potentially harmful if, for example, the function allocated new memory space and returned a pointer to it. | + | * [[Function|Functions]] can be called as if they were [[Procedure|procedures]]. The function result is discarded. This is potentially harmful if, for example, the function allocated new memory space and returned a pointer to it. Nonetheless, ''managed data types'' are insusceptible to leakage. Implementing a [[management operators|management operator]] can turn any <syntaxhighlight lang="pascal" inline>record</syntaxhighlight> into a managed data type. |
− | * Integer ''arithmetic'' | + | * Integer ''arithmetic'' expressions are allowed on [[Pointer|pointers]]. The directive [[$pointerMath|<syntaxhighlight lang="pascal" inline>{$pointerMath}</syntaxhighlight>]] had to be ''on'' for that ''during'' the respective pointer type’s definition. |
− | * Pointers become ''ordered'' and can be compared using [[Less than|<syntaxhighlight lang="pascal" inline><</syntaxhighlight>]],[[Greater than|<syntaxhighlight lang="pascal" inline>></syntaxhighlight>]], <syntaxhighlight lang="pascal" inline><=</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>>=</syntaxhighlight>. ''Typed'' pointers have to correspond to each other. | + | * Pointers become ''ordered'' and can be compared using [[Less than|<syntaxhighlight lang="pascal" inline><</syntaxhighlight>]],[[Greater than|<syntaxhighlight lang="pascal" inline>></syntaxhighlight>]], <syntaxhighlight lang="pascal" inline><=</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>>=</syntaxhighlight>. ''Typed'' pointers have to correspond to each other. The [[Equal|<syntaxhighlight lang="pascal" inline>=</syntaxhighlight>]] and [[Not equal|<syntaxhighlight lang="pascal" inline><></syntaxhighlight>]] comparisons work ''regardless'' of the <syntaxhighlight lang="pascal" inline>{$extendedSyntax}</syntaxhighlight> state. |
− | == | + | == Notes == |
+ | * If you have <syntaxhighlight lang="pascal" inline>{$extendedSyntax off}</syntaxhighlight>, you can still do pointer arithmetic with routines from other units if they have been compiled with <syntaxhighlight lang="pascal" inline>{$extendedSyntax on}</syntaxhighlight>, for example [[Inc and Dec#Special behaviors|<syntaxhighlight lang="pascal" inline>inc</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>dec</syntaxhighlight>]]:<syntaxhighlight lang="pascal" highlight="2,7">program pointerMathDemo(input, output, stdErr); | ||
+ | {$extendedSyntax off} | ||
+ | var | ||
+ | p: pChar; | ||
+ | begin | ||
+ | p := nil; | ||
+ | inc(p, 42); { no problem } | ||
+ | end.</syntaxhighlight>Similarly, unusual comparison operations may be accessible with foreign routines. | ||
+ | * Although with <syntaxhighlight lang="pascal" inline>{$extendedSyntax on}</syntaxhighlight> pointers become ordered, they do ''not'' become ''ordinal data types''; the standard functions [[Ord|<syntaxhighlight lang="pascal" inline>ord</syntaxhighlight>]], <syntaxhighlight lang="pascal" inline>succ</syntaxhighlight> and <syntaxhighlight lang="pascal" inline>pred</syntaxhighlight> are still not applicable on pointers. | ||
+ | |||
+ | == Comparative remarks == | ||
* [[Standard Pascal]] does not define any of those “extensions”. | * [[Standard Pascal]] does not define any of those “extensions”. | ||
− | |||
− | == | + | == See also == |
* [[Pascal for C users]] | * [[Pascal for C users]] | ||
− | |||
− |
Revision as of 22:35, 22 January 2022
│ Deutsch (de) │ English (en) │
The global compiler directive {$extendedSyntax on}
turns on additional syntax.
The FPC has this by default on.
The short notation is {$X+}
/{$X‑}
.
Affected syntax
- Functions can be called as if they were procedures. The function result is discarded. This is potentially harmful if, for example, the function allocated new memory space and returned a pointer to it. Nonetheless, managed data types are insusceptible to leakage. Implementing a management operator can turn any
record
into a managed data type. - Integer arithmetic expressions are allowed on pointers. The directive
{$pointerMath}
had to be on for that during the respective pointer type’s definition. - Pointers become ordered and can be compared using
<
,>
,<=
and>=
. Typed pointers have to correspond to each other. The=
and<>
comparisons work regardless of the{$extendedSyntax}
state.
Notes
- If you have
{$extendedSyntax off}
, you can still do pointer arithmetic with routines from other units if they have been compiled with{$extendedSyntax on}
, for exampleinc
anddec
:Similarly, unusual comparison operations may be accessible with foreign routines.program pointerMathDemo(input, output, stdErr); {$extendedSyntax off} var p: pChar; begin p := nil; inc(p, 42); { no problem } end.
- Although with
{$extendedSyntax on}
pointers become ordered, they do not become ordinal data types; the standard functionsord
,succ
andpred
are still not applicable on pointers.
Comparative remarks
- Standard Pascal does not define any of those “extensions”.