World: r3wp
[Core] Discuss core issues
older | first |
Pekr 21-Feb-2012 [2894] | I can't influence it, it is just result from the mapped function C level code bool (dunno how it is defined) to R2's integer! value. Was just curious .... |
Cyphre 21-Feb-2012 [2895] | Pekr, bool in C is usually of char type so you should try to set the returned value in your routine! spec to char. |
Pekr 21-Feb-2012 [2896] | Cyphre: thanks, will try that ... |
Oldes 21-Feb-2012 [2897] | Isn't it usually integer? It's must be defined somewhere btw. |
Endo 22-Feb-2012 [2898] | In win.h include file in LCC compiler; typedef int BOOL; typedef unsigned char BOOLEAN; |
Andreas 22-Feb-2012 [2899x3] | BOOL != bool. |
bool is in C since C99, and it's, in fact, *drumroll* a typedef/#define for _Bool | |
(before C99, there's simply no standard boolean type available in C) | |
Endo 22-Feb-2012 [2902] | Yep, WG14/N869 January 18, 1999 Page 257 #define bool _Bool There are some other definitions in different include files: typedef enum _BoolValue {True=1, False=0, BoolValue_Max=2147483647L } BoolValue; typedef int bool; //lowercase typedef unsigned char boolean; typedef enum { false, true } bool; // this is for Borland C I guess |
Ladislav 22-Feb-2012 [2903] | BOOL != bool - this is strange, I never found any note mentioning other datatype than int for bool. While Pekr may be experiencing bool to be defined as something smaller, all the documentation I found mentions it should be int. |
Andreas 22-Feb-2012 [2904x4] | The C standard is (as always) very vague and doesn't specify a particular storage size. I think it just defines that _Bool must be able to hold 0 and 1. |
So when encountering a "bool", one really has to ask what kind of bool that is. More often than not, it won't be a C99 _Bool and will actually be int-sized. | |
If it is a C99 _Bool, it will typically be char-sized, though. | |
And I think Pekr really has a different case, because he's trying to use a C++ lib. C++ really has a bool, and I think it's char-sized (but I don't know whether that's impl-specific in C++ or defined in the C++ standard). | |
Ladislav 23-Feb-2012 [2908x3] | If it is a C99 _Bool, it will typically be char-sized, though. - hmm, I found explicitly stated that it should be int |
The same for C++ | |
I guess that other sizes are atypical and not exactly respecting the standard | |
Endo 23-Feb-2012 [2911] | when it is int it could be 64bit or 32bit.. depend on the compiler and the OS. Pekr: So may be the C library returns a 64bit integer: #{0000000001D30000} = #{00000000 - 01D30000}, the left part is 0 (=false) the second part is just a number from stack.. When you get in from R2 it become #{01D30000} = 30605312 |
Geomol 23-Feb-2012 [2912] | Or it's a 16 bit return, and the machine, it's from, is little endian, where World is big endian. Then it's the last 4 zeros in the result, that is the bool. |
Endo 23-Feb-2012 [2913] | That could be too. |
Cyphre 23-Feb-2012 [2914x2] | Lad, In C I tried: #include <stdbool.h> int main (int argc, const char * argv[]) { printf ("bool length %d\n", sizeof(bool)); return 0; } The output was: bool length 1 So it is usually char, at least in GNU C/C++ |
I haven't found any explicit type definition in the C99 though. | |
Andreas 23-Feb-2012 [2916x2] | {"If it is a C99 _Bool, it will typically be char-sized, though." -- hmm, I found explicitly stated that it should be int} Where? |
A slightly better test would be: #include <stdio.h> int main(int argc, char *argv[]) {printf("%ld\n", sizeof(_Bool)); return 0;} And then compile that in C99 mode (i.e. -std=c99 for GCC; but C89/90 compilers will bark on the unknown _Bool keyword anyway). Better, because there exist(ed) a few stdbool.h versions prior to the final C99 standard which used e.g. unsigned integers for bools. Should be gone/fixed by now, but one never knows :) | |
Geomol 23-Feb-2012 [2918] | Under OS X using gcc, I get bool length 1 both with Cyphre and Andreas versions, and also with or without -std=c99 option. |
Cyphre 23-Feb-2012 [2919:last] | Yes, I also used the C99 compiler flag. Andreas version is more correct test ofcourse. |
older | first |