I am working with some a glib library that expects gboolean to be positive 1 for true, yet FPC emits -1 for true. Is there a compiler flag to force boolean types to emit 1 instead of -1? If so, would there possibly be any side effects with other pascal code?
Mailing lists / fpc-pascal / 2018-05
LongBool True = -1
6 messages · 4 people · –
- SSven Barth 3
- AAnthony Walter 1
- DDmitry Boyarintsev 1
- GGerhard Scholz 1
Reply by email Subscribe to this list Your subscription
Read-only archive. Use j and k to move between messages.
Anthony Walter wroteI am working with some a glib library that expects gboolean to be positive 1 for true, yet FPC emits -1 for true. Is there a compiler flag to force boolean types to emit 1 instead of -1? If so, would there possibly be any side effects with other pascal code?
Why don't you use the glib2 unit which declares a correct gBoolean type (using Boolean32 which had been introduced for that purpose) and accordingly defined gTRUE and gFALSE?
Regards,
Sven
Afaik, the bool types (longbool, wordbool, bytebool) come from the C language and are mostly used to interface with C libraries (for example: windows). The definitions there are: 0 means FALSE, anything else means TRUE. Normally C routines return a dword/word/byte filled with ones for TRUE and expect something not 0 as TRUE. So, the definition comes from C. As long Pascal programmers want to use libraries written in C, this definition should not be changed in the Pascal compiler.
Regards
Gerhard
Earlier message 22 lines
Gerhard Scholz schrieb am Sa., 19. Mai 2018, 19:51:
Show quoted text 10 lines
For glib that is not true. See my quote from their documentation. Also that library is the main reason that the Boolean32 type exists (Boolean16 and Boolean64 were logical extensions then).
Regards,
Sven
I am working with some a glib library that expects gboolean to be positive 1 for true,…
Anthony Walter wroteI am working with some a glib library that expects gboolean to be positive 1 for true, yet FPC emits -1 for true.
I'd think that pascal defines true as
true = not false;In case of unsigned integers "-1" is not an option
thanks,
Dmitry
Dmitry Boyarintsev schrieb am So., 20. Mai
2018, 04:38:
Show quoted text 10 lines
FPC defines True as 1 for Boolean, Boolean16, Boolean32 and Boolean64 and as "-1" aka "all bits 1" for Byte Book, WordBool, LongBool and QWordBool.
And for unsigned integers "-1" is converted to "all bits 1" as well though one needs to use a typecast (see the declaration of INVALID_HANDLE_VALUE for example).
Regards,
Sven
