Am 16.11.2014 11:19, schrieb Eric Kohl:
Hello Love,
I think you are trying to fix a bug at the wrong end. The boolean types BOOL and BOOLEAN only have, by definition, two valid values: TRUE (aka
- and FALSE (aka 0). Your 'other' trues (aka 2 to 2^32-1) are illegal
values which must NEVER be assigned to a boolean variable. Otherwise you accept to break the checks for TRUE.
The problem with this strict definition is, that we cannot use it, since it does not match with MS' definition. MSDN says about BOOL and BOOLEAN: "A Boolean variable (*should* be TRUE or FALSE)." Should is not must. Most win32 APIs that return BOOL are described in MSDN with something like: "If the function succeeds, the return value is *nonzero*." And there are Windows APIs that return BOOL with values other than 0 and 1. The defensive approach of avoiding direct comparison to TRUE should be the best. Quoting Raymond Chen: "Checking for equality against TRUE is asking for trouble."
Developers MUST be VERY STRICT when assigning values to a boolean variable. They HAVE to make sure that the assigned values are either TRUE or FALSE. IMO other programmers have the right to rely on the fact that a function, which returns a boolean value, only returns the values TRUE or FALSE and NEVER returns any other value. Code like "if (ReadFile(...) == TRUE)" is absolutely OK and MUST work as the programmer expects!
That might be ok for ReadFile, where MSDN explicitly says it returns TRUE on success. But it's not necessarily ok for other APIs.