On Tue, Oct 08, 2013 at 11:27:49AM +0200, Holger Hans Peter Freyther wrote:
On Sun, Oct 06, 2013 at 09:55:09PM +0200, Alexander
Huemer wrote:
Before the assigned value (0xFF) was truncated,
reg->text[0] is of
type char. A corresponding test for the same value in openbsc could
only fail.
Can you please explain?
char is an signed 8bit type, so the maximum value is 0x7F. Well, at
least usually. As I read, ANSI C does not dictate whether a variable
declared as 'char' is signed or unsigned, gcc though defaults to signed.
Excerpt from limits.h:
[...]
# define SCHAR_MAX 127
[...]
# ifdef __CHAR_UNSIGNED__ (this is not the case normally)
[...]
# define CHAR_MAX SCHAR_MAX
[...]
Example program:
int main(void)
{
char c = 0xFF;
if (c == 0xFF)
return 0;
return 1;
}
gcc gives a hint when -Wtype-limits is used.
$ gcc -Wtype-limits main.c
$ ./a.out
main.c: In function ‘main’:
main.c:5:2: warning: comparison is always false due to limited range of
data type [-Wtype-limits]
$
signed char a = 0xFF;
signed char b = 0xFF;
a == b => true. Even if the numerical is not the one, one expected?
This is true because _both_ variables got the same truncated literal.
Kind regards,
-Alex