MODULE TEmptyChar; // ISO: the empty string literal has length 0 and is compatible with // CHAR, where its value is the terminator. It also stays a string for // CHAR arrays (t_strempty covers that side). Exit 42. VAR ExitCode : INTEGER; VAR ch : CHAR; VAR s : ARRAY [0..3] OF CHAR; VAR i : INTEGER; PROCEDURE IsNul (c: CHAR) : BOOLEAN; BEGIN RETURN c = "" END IsNul; PROCEDURE Nul () : CHAR; BEGIN RETURN "" END Nul; BEGIN i := 0; ch := ""; IF (ch = "") AND IsNul(ch) AND (Nul() = "") THEN i := i + 1 END; CASE ch OF "" : i := i + 10 | 'x' : i := i + 100 ELSE i := i + 200 END; FOR ch := "" TO CHR(2) DO i := i + 1 END; (* 1 + 10 + 3 (nul, 1, 2) = 14; +28 = 42 *) s := ""; IF (i = 14) AND (s[0] = CHR(0)) THEN ExitCode := 42 ELSE ExitCode := i END END TEmptyChar.