Bedeutung der Warnung "suggest parentheses around assignment used as truth value [-Wparentheses]"

Gast #2809852
Lesenswert?

Schönen guten Abend,

ich habe eine Funktion programmiert, damit ich weniger mit Registern 
arbeiten muss wenn ich mal einen Pin ein oder ausschalten will:
1
   uint8_t port_pin[1];
2
  get_port_pin(pin,port_pin);
3
  switch(port_pin[0]){
4
 /* hier zeigt avrstudio immer hin wenn ich auf die Fehlermeldung klicke*/   case porta: if (mode==HIGH){PORTA |= (1<<port_pin[1]);} if (mode=LOW){PORTA &= ~(1<<port_pin[1]);} break;
5
    case portb: if (mode==HIGH){PORTB |= (1<<port_pin[1]);} if (mode=LOW){PORTB &= ~(1<<port_pin[1]);} break;
6
    case portc: if (mode==HIGH){PORTC |= (1<<port_pin[1]);} if (mode=LOW){PORTC &= ~(1<<port_pin[1]);} break;
7
    case portd: if (mode==HIGH){PORTD |= (1<<port_pin[1]);} if (mode=LOW){PORTD &= ~(1<<port_pin[1]);} break;

ich habe sie bereits getestet, und sie funktioniert. Jedoch verstehe ich 
nicht wieso ich dort immer folgende Warnung bekomme: "suggest 
parentheses around assignment used as truth value [-Wparentheses]"

kleine Nebeninfo:
porta bis portc sind absichtlich klein geschrieben, sie sind defines und 
sind einfach nur Integer Werte von 1-4. get_port_pin schreibt nur in das 
vorher initialisierte Array, in  [0] schreibt es den Port (Wert von 1-4) 
in [1] den dazugehöroten Pin (Wert 0-7)
#2809869
Lesenswert?

coco jack schrieb:
> if (mode==HIGH)
so ist es richtig, es wird ein Vergleich auf Gleichheit vorgenommen.

> if (mode=LOW)
so ist es falsch (zumindest macht es nicht das, was Du möchtest), da 
hier eine Zuweisung erfolgt.

Außerdem:
> uint8_t port_pin[1];

Hier wird ein Array port_pin mit nur einem Element daklariert. Der 
Index dieses einzigen Elemts ist "0". Später greifst Du aber auf

> port_pin[1]

zu.
Gast #2809974
Lesenswert?

oh bei dem mode=LOW hab ich wohl nicht aufgepasst..

a

J.-u. G. schrieb:
> Hier wird ein Array port_pin mit nur einem Element daklariert. Der
> Index dieses einzigen Elemts ist "0". Später greifst Du aber auf

da muss ich nochmal nachlesen.. ist ja jetzt schon einige Monate her 
dass ich mal mit Arrays gearbeitet habe :D
#2810045
Lesenswert?

coco jack schrieb:
> das ganze Projekt sollte mir helfen arduino code leichter zu portieren

Dann solltst du dich auf jeden Fall erst mal an

   if( ... )
    ...
   else
    ...

gewöhnen.

WElche Werte kann denn dein mode annehmen?
Doch wohl nur HIGH oder LOW. Wenn er nicht HIGH ist, dann muss er LOW 
sein. Die zweite Abfrage ist daher sinnlos, denn entweder mode ist 
gleich HIGH oder er ist es nicht

   if( mode == HIGH )
     ...
   else
     ...

Das spart dann auch einen 2.ten if ein, der nur aus einem Grund 
vorhanden ist: damit man dort noch eine Chance auf Tippfehler hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren