mikrocontroller.net

Forum: Compiler & IDEs Warnung unklar


Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael M. (Gast)
Datum:

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

:-)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 */
}

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...was soll uns das jetzt sagen?

Autor: Michael M. (Gast)
Datum:

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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Jörg Wunsch (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.