Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2018-05

LongBool True = -1

6 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Anthony Walter

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?

Sven Barth
to Anthony Walter
Anthony Walter wrote
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?

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

Gerhard Scholz
to Sven Barth

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
----- Original Message ----- From: "Sven Barth via fpc-pascal" To: Cc: "Sven Barth" Sent: Friday, May 18, 2018 7:22 AM Subject: Re: [fpc-pascal] LongBool True = -1 > Am 17.05.2018 um 23:26 schrieb Anthony Walter: >> 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? > 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 > _______________________________________________ > fpc-pascal maillist - > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Sven Barth
to Gerhard Scholz

Gerhard Scholz schrieb am Sa., 19. Mai 2018, 19:51:

Show quoted text 10 lines
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.

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

Sven Barth
to Dmitry Boyarintsev

Dmitry Boyarintsev schrieb am So., 20. Mai
2018, 04:38:

Show quoted text 10 lines
On Thu, May 17, 2018 at 5:26 PM, Anthony Walter wrote: > I 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

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