[fpc-devel] BOOL

Mark Morgan Lloyd markMLl.fpc-devel at telemetry.co.uk
Mon Dec 15 10:07:34 CET 2014

Adriaan van Os wrote:
> 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
> #endif
> #define TRUE  1
>> Afaik BOOL was implemented for winapi benefit, and the boolean* types for
>> pascal booleans (0,1)

With a slight health warning in that #undef etc. applies to the C 
preprocessor which is generally loosely-coupled to the underlying 
language. There might be cases where this model doesn't apply to Pascal 
implementations, which typically have integrated handling of compiler 

I agree that zero and false are generally equivalent, except possibly in 
the case of unix shell scripts where it gets messy. It's arguably unsafe 
to ever cast true to a number or enumeration, and possibly the best 
behaviour would be to ensure that the compiler always handled  for b := 
false to not false do  and for b := not false to false do  the same.

Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]

More information about the fpc-devel mailing list