Re: GinPageIs* don't actually return a boolean
От | Andres Freund |
---|---|
Тема | Re: GinPageIs* don't actually return a boolean |
Дата | |
Msg-id | 20160212144735.7zkg5527i3un3254@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: GinPageIs* don't actually return a boolean (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-hackers |
On 2016-02-12 09:39:20 -0500, Tom Lane wrote: > Robert Haas <robertmhaas@gmail.com> writes: > > On Fri, Feb 12, 2016 at 8:48 AM, Andres Freund <andres@anarazel.de> wrote: > >> E.g. if you include stdbool.h [ ginStepRight breaks ] > > > Ah-ha. OK, now I get it. So then I agree we should back-patch this > > at least as far as 9.3 where MSVC 2013 became a supported platform, > > Um, no, that does not follow. Well, these headers are generally buggy, so ... > The unanswered question here is why, > when we *have not* included stdbool.h and *have* typedef'd bool as > just plain "char", we would get C99 bool behavior. There is something > happening there that should not be happening, and I'm not really satisfied > with the explanation "Microsoft is brain-dead as usual". I think we > should dig deeper, because whatever is going on there may have deeper > effects than we now realize. Well, http://archives.postgresql.org/message-id/d2106c2d-0f46-4cf9-af27-54f81ef6e20c%40postgrespro.ru outlines how stdbool.h gets included. That happens fairly at the begining of c.h. Later our definitions are guarded by ifdefs: #ifndef bool typedef char bool; #endif #ifndef true #define true ((bool) 1) #endif #ifndef false #define false ((bool) 0) #endif So we can lament that MS standard libraries include stdbool.h instead of using _Bool. But I doubt that's going to buy us super much. Btw, there's a distinct advantage including stdbool: Compilers actually generate a fair bit better error messages/warnings in some cases. And the generated code sometimes is a bit better, too. Andres
В списке pgsql-hackers по дате отправления: