[fpc-devel] BOOL

Adriaan van Os fpc at microbizz.nl
Sun Dec 14 18:04:32 CET 2014

Marco van de Voort wrote:
> In our previous episode, Adriaan van Os said:
>> reveals 0 for False and -1 for True, where I had expected 0 for False and
>> 1 f
>> according to <http://msdn.microsoft.com/en-us/library/eke1xt9y.aspx> the
>> same
>> respectively in Visual Studio 2013.
> There is a C (99?) bool type, and a winapi (and much older) BOOL type. Two
> different libraries, two different headers, two different cases :-)
> In old SDKs, BOOL was defined in windef.h, but can't seem to quickly find
> that in my current 8.1 (that was seriously mangled due to the winrt
> additions). 

WIndef.h in the v7.0 WinSDK clearly defines

#ifdef TRUE
#undef TRUE
#define TRUE  1

> Afaik BOOL was implemented for winapi benefit, and the boolean* types for
> pascal booleans (0,1)
> More importantly, TRUE is generally defined as !FALSE, and vice versa (your
> URL mentiones that too), and thus not as succ(TRUE).  So even if the values
> are successive, that doesn't mean it is ordinal other than being an integer
> derived value in older compilers.

Well, not true = false and not false = true, that still holds. Which is not the same as
not(ord(b))=ord(not(b)) which does not hold.
>> So, there doesn't seem to be a WIndows compatibilty reason to use -1 for
>> True
>> Delphi has -1 for True, but then it would apply to mode Delphi only).
> IMHO using the for loop on a non pascal boolean type is simply wrong. At the
> very least the assumption that the false and true are successive, and maybe
> even using BOOL as loopvar in the first place.

The compiler accepts it.


Adriaan van Os

More information about the fpc-devel mailing list