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 directives.

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]
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to