false and true
The constants false and true are used to define the false and true conditions of a boolean variable. They are manifest constants that are defined as part of the standard data types the compiler initially knows about.
These constant values must be predefined by the compiler as there is no way to define them in terms of anything else. They are defined via compiler/psystem.pas as part of the system unit.
As of FPC 3.0.0 false and true are no longer reserved words. Thus the following program is valid, compiles and is “usable”:
program falseAndTrue(input, output, stderr);
const
true = 42;
begin
writeLn(true); // prints 42
//writeLn(true and false); // does not compile
writeLn(system.true and false) // prints FALSE
end.Internal value
program falseDemo(input, output, stderr);
uses
typInfo;
begin
writeLn(false); // prints FALSE
// enumerative actions ------------------------------------------
writeLn(ord(false)); // prints 0
writeLn(succ(false)); // prints TRUE
// next two statements generate compile errors
// "Error: range check error while evaluating constants (-1 must be between 0 and 1)"
writeLn(pred(false));
// " Error: range check error while evaluating constants (2 must be between 0 and 1)"
writeLn(succ(succ(false)));
// data type ----------------------------------------------------
writeLn(sizeOf(false)); // prints 1
writeLn(bitSizeOf(false)); // prints 8
writeLn(PTypeInfo(typeInfo(false))^.kind); // prints tkBool
writeLn(PTypeInfo(typeInfo(false))^.name); // prints Boolean
end.When typecasting or interpreting any numeric value as a boolean value, it is important to know, that any non-zero value means true whilst only 0 (zero) is false.
Confer ISO 7185 § “Required simple-types”.
Two types of True
(according to developer PascalDragon) There are two types of True in Pascal:
- the True for Boolean , Boolean8 , Boolean16 , Boolean32 and Boolean64 has the value 1, anything else (except 0 for False) is undefined.
- for ByteBool , WordBool , LongBool (the type for the Windows API's BOOL) and QWordBool any value that is not 0 is True, but if you assign True to such a type it will have the value "not 0" in the appropriate bit width.
VALUES SUMMARY
· | Boolean | Boolean8 | Boolean16 | Boolean32 | Boolean64 | ByteBool | WordBool | LongBool | QWordBool
false | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
true | 1 | 1 | 1 | 1 | 1 | 1..FF | 1..FFFF | 1..FFFFFFFF | 1..FFFFFFFFFFFFFFFF
undefined | 2..FF | 2..FF | 2..FFFF | 2..FFFFFFFF | 2..FFFFFFFFFFFFFFFF | | | |
See also
From the Free Pascal wiki, page "false and true", as the Internet Archive kept it on 2026-02-06, last changed on 2025-08-06. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Edited on wiki.freepascal.org by 9 people, 2005–2023
From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.
| When | Who | What changed |
|---|---|---|
| Rfc1394 | ||
| Swen | (minor) | |
| Swen | (minor) | |
| Djzepi | ||
| Jwdietrich | ||
| Swen | (minor) | |
| FPC user | Fix internal link (minor) | |
| FPC user | internal link | |
| Kai Burghardt | review; add some example code | |
| Djzepi | ||
| Kai Burghardt | Kai Burghardt moved page False to false and true: merge: deduplicate page contents (minor) | |
| Kai Burghardt | adjust page content to talk about _both_ false _and_ true | |
| Kai Burghardt | grammar (minor) | |
| Kai Burghardt | use Template:Translate; add hint about typecasting | |
| Kai Burghardt | add Category:Code, Category:Pascal, Category:Reserved words | |
| Bart | True and False ar NOT reserved words in fpc. | |
| Kai Burghardt | past tense statement concerning reserved words | |
| Trev | Fixed template loop (minor) | |
| Trev | Fixed syntax highlighting; deleted category included in page template (minor) | |
| Trev | Corrected the status of false and true as of FPC 3.0 (minor) | |
| Kai Burghardt | replace legacy syntaxhighlight syntax; partially undo revision 133640 (re-introduce :Category: Code); add some external references (minor) | |
| Alextpp | See also | |
| Alextpp | Two types of True | |
| Alextpp | Two types of True | |
| FPC user | Internal value: update to current 3.2.2 compiler behavior |
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
