I have the following code
//Point.h
#define WIDTH 8
#define HEIGHT 8
typedef struct Point
{
char x;
char y;
} Point;
//Board.c
#include
Try this:
typedef struct Point
{
signed char x;
signed char y;
} Point;
I guess x >= 0
causes the warning because char
might be implemented as unsigned char
.
The char
type may be signed or unsigned. It depends on your compiler vendor's choice. There might even be a compiler option available. Evidently, char
is unsigned for you, so it's always greater than or equal to zero, and thus the compiler warns you.
You're using char
here to represent "a numeric type that takes up minimal memory." In that case, I recommend explicitly using signed char
or unsigned char
. (Each is distinct from plain char
, despite char
having to be either signed or unsigned.) Reserve char
for when you're holding character data. For numeric data, use one of the other two types.
Hummm... isn't your char unsigned by default? In that case the range would be 0-255, which means your >=0 comparison would be always true
The C and C++ standards allows the character type char to be signed or unsigned, depending on the platform and compiler. Most systems, including x86 GNU/Linux and Microsoft Windows, use signed char, but those based on PowerPC and ARM processors typically use unsigned char.(29) This can lead to unexpected results when porting programs between platforms which have different defaults for the type of char.
Are you sure that char
is signed? Try declaring the fields explictly as signed char
and see what you get.