<div dir="ltr">But to be portable to C++, you can't use C99 features.  Some common C++ compilers do not provide C99.<div><br></div><div style>Jonny D</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Sun, Mar 17, 2013 at 4:59 PM, John <span dir="ltr"><<a href="mailto:john@leafygreengames.com" target="_blank">john@leafygreengames.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">On 03/17/2013 04:37 PM, Andreas Schiffler wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Since SDL is compiled as "C", I am not sure how one would switch to C++'s "bool"<br>
type and maintain binary compatibility across all platforms.<br>
</blockquote>
<br></div>
I think the proposal is that SDL should switch to *C*'s bool type (not C++'s).<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Using SDL_bool or similar enumerations have a clear advantage in C: they convey<br>
the programmers intent of a binary decision or result. In most cases, how this<br>
is implemented at the low level (bit, byte, int) is secondary unless data<br>
structures which are using these constructs need to scale to large numbers (i.e.<br>
think of a particle system tracking state with 8 SDL_bool's implemented as 32bit<br>
int vs an implementation as single 8bit byte and a bitmask - memory overhead is<br>
32:1).<br>
<br>
A clear practical benefit is, that compilers can use this "boolean intent" to<br>
fail code during compilation which prevents bugs. Example:<br>
<br>
\\ int boolean<br>
int binary_result = MyFunctionReturningZeroOrOne()<u></u>; \\ assume it returns 2<br>
instead of 0 because of a bug<br>
if (binary_result == 0) { DoSomethingGood(); } else { DoSomethingBad(); } \\<br>
DoSomethingBad can be called and we wouldn't know why until debugging<br>
if (binary_result == 2) { ... } \\ Compiler is fine with this, yet for a<br>
correctly implemented function, this would never be called<br>
<br>
\\ enum boolean<br>
SDL_bool binary_result = MyFunctionReturningTrueOrFalse<u></u>(); \\ By definition of<br>
the result type, we cannot return anything else but TRUE or FALSE<br>
if (binary_result == SDL_TRUE) { DoSomethingGood(); } else { DoSomethingBad(); }<br>
\\ TRUE is clearly associated with DoSomethingGood; aka intent in code<br>
if (binary_result == 2) { ... } \\ Compiler will fail to compile or minimally warn<br>
<br>
The only downside is that one has slightly more code to write ... but that<br>
should never deter a good programmer. ;-)<br>
<br>
--Andreas<br>
<br>
On 3/17/2013 10:18 AM, Forest Hale wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Two technical notes on C++ bool:<br>
1. comparison operators produce bool, and 0 and 1 are not considered<br>
equivalent to false and true (or rather they are convertible but the compiler<br>
may choose to warn about it).<br>
2. bool is 1 byte at least on x86 compilers, unlike an enum which is 4 bytes<br>
on x86 compilers, they are not bit packed but they are still considerably<br>
smaller than an enum definition of bool, it's<br>
best to group them in a struct to save memory (for the same reason one should<br>
group all same-size types so they don't need to be padded to alignment).<br>
<br>
On 03/17/2013 09:38 AM, John wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It's just a matter of it being a modern built-in type. You would use it for<br>
the same reasons you would use the built-in "string" type in a language. The<br>
advantage is code clarity and widespread<br>
familiarity.<br>
<br>
In C, there is a small technical advantage to using the built-in bool over a<br>
UDT. bool might minimize use of space in memory, registers, etc., because<br>
bool is typically 8-bits, while enums are<br>
typically native ints, unless forced to be otherwise via compiler-specific<br>
options.<br>
<br>
In C++, there are several technical advantages of bool being a distinct type,<br>
such as overloading, template specialization and implicit conversion.<br>
<br>
For SDL, I'd say the advantage is mostly one of keeping up appearances. :)<br>
<br>
<br>
<br>
On 03/17/2013 07:28 AM, Vittorio Giovara wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Is there any advantage in using bool at all?<br>
As far as I know packing one bit in memory or in a struct will usually<br>
wrap the variable or struct in at least a byte segment in memory; so<br>
using a uint8_t type and a 0 or 1 value could achieve the same thing<br>
and without adding a new type.<br>
Or did I miss something?<br>
Vittorio<br>
<br>
Sent from my iPad Mini<br>
<br>
On 17/mar/2013, at 00:45, John <<a href="mailto:john@leafygreengames.com" target="_blank">john@leafygreengames.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
C99 declares both bool and _Bool, plus a macro, __bool_true_false_are_defined.<br>
The point of the macro is so you can fix these sort of custom boolean types<br>
in older code without breaking anything.<br>
<br>
<br>
<br>
On 03/16/2013 05:47 PM, Sik the hedgehog wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think C99's support for boolean values consists of stdbool.h and a<br>
_Bool type (*not* bool). Correct me if I'm wrong.<br>
<br>
2013/3/16, Alex Barry <<a href="mailto:alex.barry@gmail.com" target="_blank">alex.barry@gmail.com</a>>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Sat, Mar 16, 2013 at 4:52 PM, Steven Noonan<br>
<<a href="mailto:steven@uplinklabs.net" target="_blank">steven@uplinklabs.net</a>>wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The 'bool' type was added in C99 (see section 7.16 in the C99 standard).<br>
</blockquote>
That's true, but I think Sam's logic is to support the lowest common<br>
denominator - in this case, not every compiler will support a bool in<br>
standard C, and it is typical for a C library to define a TRUE/FALSE value.<br>
<br>
I think typically, if a programmer is using SDL from C++, they would be<br>
wrapping a lot of functions in C classes where SDL_Bool could be translated<br>
into bool true/false values.<br>
</blockquote>
______________________________<u></u>_________________<br>
SDL mailing list<br>
<a href="mailto:SDL@lists.libsdl.org" target="_blank">SDL@lists.libsdl.org</a><br>
<a href="http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org" target="_blank">http://lists.libsdl.org/<u></u>listinfo.cgi/sdl-libsdl.org</a><br>
</blockquote>
______________________________<u></u>_________________<br>
SDL mailing list<br>
<a href="mailto:SDL@lists.libsdl.org" target="_blank">SDL@lists.libsdl.org</a><br>
<a href="http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org" target="_blank">http://lists.libsdl.org/<u></u>listinfo.cgi/sdl-libsdl.org</a><br>
</blockquote>
______________________________<u></u>_________________<br>
SDL mailing list<br>
<a href="mailto:SDL@lists.libsdl.org" target="_blank">SDL@lists.libsdl.org</a><br>
<a href="http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org" target="_blank">http://lists.libsdl.org/<u></u>listinfo.cgi/sdl-libsdl.org</a><br>
<br>
</blockquote>
______________________________<u></u>_________________<br>
SDL mailing list<br>
<a href="mailto:SDL@lists.libsdl.org" target="_blank">SDL@lists.libsdl.org</a><br>
<a href="http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org" target="_blank">http://lists.libsdl.org/<u></u>listinfo.cgi/sdl-libsdl.org</a><br>
<br>
</blockquote>
<br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
SDL mailing list<br>
<a href="mailto:SDL@lists.libsdl.org" target="_blank">SDL@lists.libsdl.org</a><br>
<a href="http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org" target="_blank">http://lists.libsdl.org/<u></u>listinfo.cgi/sdl-libsdl.org</a><br>
</blockquote>
______________________________<u></u>_________________<br>
SDL mailing list<br>
<a href="mailto:SDL@lists.libsdl.org" target="_blank">SDL@lists.libsdl.org</a><br>
<a href="http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org" target="_blank">http://lists.libsdl.org/<u></u>listinfo.cgi/sdl-libsdl.org</a><br>
</div></div></blockquote></div><br></div>