Forum: Compiler & IDEs Warnung unklar


von Michael M. (Gast)


Lesenswert?

Zu der Programmzeile:

spd.buf_idx = (spd.buf_idx + 1) & REED_BUF_MASK;

erhalte ich folgende mir unklare Warnung:

measure.c:66: warning: suggest parentheses around + or - in operand of
&

Was für Klammern vermisst er denn?

Danke!

von Jörg Wunsch (Gast)


Lesenswert?

Das kann Dir nur die Expansion des Makros REED_BUF_MASK verraten.

Es ist generell eine gute Idee, in solchen Makros auf der rechten
Seite aus Prinzip zu klammern.

von Michael M. (Gast)


Lesenswert?

Morgen ;-))
Sorry.. Das Makro ist einfach eine Maske:
#define REED_BUF_MASK 7

:-)

von OldBug (Gast)


Lesenswert?

#include <inttypes.h>

#define REED_BUF_MASK 7

struct
foo_s
{
        uint8_t buf_idx;
};

int
main(void)
{
        volatile struct foo_s spd;

        while(1)
        {
                spd.buf_idx = (spd.buf_idx + 1) & REED_BUF_MASK;
        }

        /* NEVEREACHED */
        return 0;
}

Das gibt bei mir keinen Fehler, und auch keine Warnung.
Opt: -s, Debug: ELF/DWARF-2, MCU: mega8

von Michael M. (Gast)


Angehängte Dateien:

Lesenswert?

/* foo.h: ***************/
#define REED_BUF_MASK 7

typedef struct{
   uint8_t buf_idx;
}foo_t;

/* foo.c ***************/
#include "foo.h"
/* #include weiteres */

foo_t spd;

void nicht_main(void){
   /* code */
   spd.buf_idx = (spd.buf_idx + 1) & REED_BUF_MASK;
   /* code */
}

von OldBug (Gast)


Lesenswert?

...was soll uns das jetzt sagen?

von Michael M. (Gast)


Lesenswert?

Hatte gehofft, das konkreterer Code und das makefile die infos liefern,
weshalb Du keine, ich aber eine Warnung habe.

von OldBug (Gast)


Lesenswert?

Naja, der Code in kombination mit dem Makefile ist nicht Kompilierbar.
Wenn ich es so Modifiziere, daß es sich kompilieren lässt (fehlende
includes etc), bekomme ich wieder keine Fehlermeldung!

von Michael M. (Gast)


Lesenswert?

Ich bin ein riesen Rindvieh und versinke im Boden. In meinem Kopf war
REED_BUF_MASK ne simple Konstante und nach ner durchzechten
Programmiernacht (Termindruck;-) irgendwie nicht mehr im bewußten
Blickfeld...

#define REED_BUF_SIZE 8
#define REED_BUF_MASK REED_BUF_SIZE-1

Sorry und vielen Dank!!!

So ist alles tutti:
#define REED_BUF_MASK (REED_BUF_SIZE-1)

von Jörg Wunsch (Gast)


Lesenswert?

Immer, wenn mir mal eine derartige Warnung unklar ist, sehe ich mir
die Ausgabe des Präprozessors an (avr-gcc ... -E).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.