From Free Pascal wiki
Revision as of 16:43, 7 September 2019 by Kai Burghardt (talk | contribs) (→‎octal base: add note about exemptions)
Jump to navigationJump to search

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


In ASCII the character code decimal 38 (or $26) is defined to be & (pronounced “ampersand”).


octal base

In Pascal the & denotes an octal base number.

 1program messageNo(input, output, stderr);
 4	baseUnix;
 7	// withdraw group write access to current terminal
 8	// equivalent to invoking: mesg n
 9	fpChmod('/dev/stdin', &0600);

In an octal base only the characters 0 through and including 7 are allowed. An optional sign is specified in front of the &.

As a passing remark, in a production program the number in the above example is better written as

fpChmod('/dev/stdin', S_IRUSR or S_IWUSR);

since it is more meaningful than having a raw number. Pascal is a high-level language. Use this advantage. Write what you mean, not what in fact the computer does.

Light bulb  Note: Octal number literals are not supported in {$mode Delphi} and {$mode TP}.

identifier escape

FreePascal retroactively declared some new reserved words. In order of being capable of compiling old code with an up-to-date compiler version, which might fail due to those new reserved words, FPC declared the & as an escape character. Thus, without refactoring the code but escaping, i.e. prepending an & to the identifier, the compiler accepts the actual reserved word as a valid identifier. New code though shall come up with different identifier names, without utilizing this feature.


In Lazarus the & is used to

navigation bar: topic: Pascal symbols
single characters

+ (plus)  •  - (minus)  •  * (asterisk)  •  / (slash)
= (equal)  •  > (greater than)  •  < (less than)
. (period)  •  : (colon)  •  ; (semi colon)
^ (hat)  •  @ (at)
$ (dollar sign)  •  & (ampersand)  •  # (hash)
' (single quote)

character pairs

<> (not equal)  •  <= (less than or equal)  •  := (becomes)  •  >= (greater than or equal)

 •  >< (symmetric difference)  •  // (double slash)