Hallo Gemeinde
Ich dachte, dass Berechnungen in C grundsätzlich als (signed) Integer
durchgeführt werden. Nun reklamiert der GCC aber folgenden Code
(Auschnitt):
1 | #define TG_RESP_LEN 10
|
2 | #define TG_RESP_IDX_ERRDETECT (TG_RESP_LEN - 1)
|
3 | #define TG_NO_MASK 0x0f
|
4 |
|
5 | static uint8 mBufRead[TG_RESP_LEN];
|
6 | static uint32 mTelegramCnt = 0;
|
7 |
|
8 |
|
9 | if ((mBufRead[TG_RESP_IDX_ERRDETECT] & TG_NO_MASK) == (mTelegramCnt % 16)) // <- hier
|
1 | K:\source\sys\comValve.c 262 warning: comparison between signed and unsigned
|
Wenn ich die linke Hälfte des Vergleiches auf (unsigned int) caste, ist
der gcc zufrieden.
Ich verstehe nicht, warum die linke Hälfte angeblich vom Typ int sein
soll, während die rechte Hälfte unsigned int sei.