switch case ohne break und Befehl, Programmablauf?

Gast #4792591
Lesenswert?

Hallo,

ich habe folgendes gegeben:
1
switch (config.ctrl_type) {
2
    case PPM_CTRL_TYPE_CURRENT_NOREV:
3
    case PPM_CTRL_TYPE_DUTY_NOREV:
4
    case PPM_CTRL_TYPE_PID_NOREV:
5
      servo_val += 1.0;
6
      servo_val /= 2.0;
7
      break;
8

9
    default:
10
      break;
11
    }


Wann wird nun was ausgeführt?

Und warum fehlt "break" zwischen den einzelnen case-Anweisungen? Welchen 
Sinn soll das haben?



mfg
Gast #4792604
Lesenswert?

henni schrieb:
> Wann wird nun was ausgeführt?

Wenn config.ctrl_type eines der folgenden ist: case 
PPM_CTRL_TYPE_CURRENT_NOREV oder PPM_CTRL_TYPE_DUTY_NOREV oder 
PPM_CTRL_TYPE_PID_NOREV, dann wird das hier ausgeführt:

servo_val += 1.0;
servo_val /= 2.0;

das ist äquivalent zu folgendem Code:
1
if ((config.ctrl_type == PPM_CTRL_TYPE_CURRENT_NOREV) ||
2
    (config.ctrl_type == PPM_CTRL_TYPE_DUTY_NOREV) ||
3
    (config.ctrl_type == PPM_CTRL_TYPE_PID_NOREV))
4
{
5
      servo_val += 1.0;
6
      servo_val /= 2.0;
7
}

Ist config.ctrl_type keines der drei oben genannten, wird nichts 
gemacht.

> Und warum fehlt "break" zwischen den einzelnen case-Anweisungen? Welchen
> Sinn soll das haben?

Eben daß der Programmablauf hindurchfallen kann. Das macht man bei 
Statemachines ganz gerne, wenn mehrere Zustände dieselben Befehle 
teilen. Typischerweise hätte man dann z.B. nach case 
PPM_CTRL_TYPE_CURRENT_NOREV noch ein paar Befehle, dann kein break, und 
dann fällt man auf die gemeinsamen weiteren Befehle der Zustände.

Etwa sowas hier:
1
switch (config.ctrl_type) {
2
    case PPM_CTRL_TYPE_CURRENT_NOREV:
3
      something_special_current();
4
    case PPM_CTRL_TYPE_DUTY_NOREV:
5
      something_special_current_and_duty();
6
    case PPM_CTRL_TYPE_PID_NOREV:
7
      something_for_current_and_duty_and_pid();
8
      break;
9

10
    default:
11
      break;
12
    }

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