false and true

From Lazarus wiki
Revision as of 10:09, 4 May 2022 by Alextpp (talk | contribs) (→‎Two types of True)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

English (en)

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);

	true = 42;

	writeLn(true);                 // prints 42
	//writeLn(true and false);     // does not compile
	writeLn(system.true and false) // prints FALSE

Internal value

program falseDemo(input, output, stderr);


	writeLn(false);                            // prints FALSE
	// enumerative actions ------------------------------------------
	writeLn(ord(false));                       // prints 0
	writeLn(succ(false));                      // prints TRUE
	// next two statements generate out-of-range compile-time warnings
	writeLn(pred(false));                      // prints TRUE
	writeLn(succ(succ(false)));                // prints TRUE
	// 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

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.

See also