"case" Anweisung mit zusätzlichem "if"

Gast #523316
Lesenswert?
• ▲
▼
Hallo Leute
ich hatte die verwegene Idee, meine Case-Anweisung um eine weitere 
Bedingung zu erweitern.
Der Compiler meckert nicht und das Programm funktioniert auch soweit, 
mit Außnahme der if-Anweisung. Die wird offenbar ignoriert.
1
if (checkbit(GPIOR2,GPIOR07))
2
case 0x55:
3
display_cursor(1,1);
4
display_string("Bit ist 1"); 
5
break;

Gibt es einen anderen Weg die case-Anweisung zu sperren?
Hintergrund. Ich möchte am Ende noch die default-Anweisung nutzen, wenn 
die Anweisung wegen des nicht gesetzten GPIOR07 nicht abgearbeitet 
werden konnte.
Gast #523323
Lesenswert?
• ▲
▼
Vielleicht etwa so:

if (checkbit(GPIOR2,GPIOR07))
{
  switch ( irgendeine_variable )
  {
    case 0x55:                       // wenn: irgendeine_variable = 0x55
        display_cursor(1,1);
        display_string("Bit ist 1");
        break;
    case 0x11:                       // wenn: irgendeine_variable = 0x11
        // statements
        break;
  }
}
else
{
  // statements, if needed
}
Gast #523368
Lesenswert?
• ▲
▼
Und was ist, wenn du zu dem if (checkbit... noch ein else mit den 
default anweisungen hinzufügst?

case 0x55:
   if (...)
   {
     ....
   }
   else
   {
     // hier nochmal default anweisungen
   }
   break;
case ...



default:


}  // switch ende
Gast #523413
Lesenswert?
• ▲
▼
wozu soll er die default-routine abarbeiten wenn er auf einen gültigen 
case trifft? default macht er nur wenn kein case getroffen wurde. mein 
vorschlag:
1
switch (bla)
2
{
3
  case 0x??:
4
   break;
5

6
  /*alle anderen cases*/
7

8
  case 0x55:
9
   if(/*deine abfrage*/)
10
   {
11
     /*deine anweisungen*/
12
   }
13
   /*KEIN break damit er in default übergeht*/
14
  default:
15
   /*dein default*/
16
}

funktioniert so nur bei einem case so wie es soll.


pumpkin
Gast #523417
Lesenswert?
• ▲
▼
ups, break vergessen in der if abfrage.

1
switch (bla)
2
{
3
  case 0x??:
4
   break;
5

6
  /*alle anderen cases*/
7

8
  case 0x55:
9
   if(/*deine abfrage*/)
10
   {
11
     /*deine anweisungen*/
12
     break;
13
   }
14
   /*KEIN break damit er in default übergeht*/
15
  default:
16
   /*dein default*/
17
}


pumpkin
Persönliche Seite #523545
Lesenswert?
• ▲
▼
Um bei tex' Version zu bleiben:
Keine Ahnung, ob das Funktioniert und genau das macht, was er will (weil 
ich es nicht getestet habe), aber weshalb seine Version "nicht 
Funktioniert", ist, dass er nur das 'case-label' (also nur die eine 
Zeile nach dem if) im Programm aktiv hat, wenn das Bit gesetzt ist. 
Möglicherweise wollte er ja folgendes:
1
switch(val)
2
{
3
  if (checkbit(GPIOR2,GPIOR07))
4
  {
5
    case 0x55:
6
      display_cursor(1,1);
7
      display_string("Bit ist 1");
8
      break;
9
  } /* if(checkbit... */
10

11
  default:
12
    break;
13
} /* switch(val) */

Aber wie gesagt: möglicherweise übersehe ich da am frühen Morgen auch 
noch ein paar Details und ich hab's nicht getestet.
Die Kommentare an den Klammerpaaren habe ich mal zum Verständnis 
hinzugefügt.


Gast #523675
Lesenswert?
• ▲
▼
nein, so funktioniert das leider nicht. in diesem fall wird er das if 
nie anfassen da er immer einen JMP zum case macht. und der erwünschte 
effekt, dass er defaultet auf grund der bedingung, tritt auch nicht ein.

is noch früh  ;)


pumpkin

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