This example shows how to implement a switch construct by using Simulink blocks, Stateflow Charts, and MATLAB Function block.
switch (u1)
{
case 2:
y1 = u2;
break;
case 3:
u3;
break;
default:
y1 = u4;
break;
}
One method to create a switch statement is to use a Switch Case block from the Simulink > Signal Routing library.
1. Open example model ex_switch_SL.

The model contains a Switch Case Action Subsystem. The Switch Case block takes an integer input, therefore, the input signal u1 is type cast to int32.
2. To build the model and generate code, press Ctrl+B.
The code implementing the switch construct is in the ex_switch_SL_step function in ex_switch_SL.c:
/* Exported block signals */
int32_T u1; /* '<Root>/u1' */
/* External inputs (root inport signals with default storage) */
ExternalInputs rtU;
/* External outputs (root outports fed by signals with default storage) */
ExternalOutputs rtY;
/* Model step function */
void ex_switch_SL_step(void)
{
/* SwitchCase: '<Root>/Switch Case' incorporates:
* Inport: '<Root>/u1'
*/
switch (u1) {
case 2:
/* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem' incorporates:
* ActionPort: '<S1>/Action Port'
*/
/* Outport: '<Root>/y1' incorporates:
* Inport: '<Root>/u2'
* Inport: '<S1>/u2'
*/
rtY.y1 = rtU.u2;
/* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem' */
break;
case 3:
/* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem1' incorporates:
* ActionPort: '<S2>/Action Port'
*/
/* Outport: '<Root>/y1' incorporates:
* Inport: '<Root>/u3'
* Inport: '<S2>/u3'
*/
rtY.y1 = rtU.u3;
/* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem1' */
break;
default:
/* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem2' incorporates:
* ActionPort: '<S3>/Action Port'
*/
/* Outport: '<Root>/y1' incorporates:
* Inport: '<Root>/u4'
* Inport: '<S3>/u4'
*/
rtY.y1 = rtU.u4;
/* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem2' */
break;
}
/* End of SwitchCase: '<Root>/Switch Case' */
}
1. Open example model ex_switch_ML.

The MATLAB Function Block contains this function:
function y1 = fcn(u1, u2, u3, u4) switch u1 case 2 y1 = u2; case 3 y1 = u3; otherwise y1 = u4; end
2. To build the model and generate code, press Ctrl+B.
The code implementing the switch construct is in the ex_switch_ML_step function in ex_switch_ML.c:
/* External inputs (root inport signals with default storage) */
ExternalInputs rtU;
/* External outputs (root outports fed by signals with default storage) */
ExternalOutputs rtY;
/* Model step function */
void ex_switch_ML_step(void)
{
/* MATLAB Function: '<Root>/MATLAB Function' incorporates:
* Inport: '<Root>/u1'
*/
switch (rtU.u1) {
case 2:
/* Outport: '<Root>/y1' incorporates:
* Inport: '<Root>/u2'
*/
rtY.y1 = rtU.u2;
break;
case 3:
/* Outport: '<Root>/y1' incorporates:
* Inport: '<Root>/u3'
*/
rtY.y1 = rtU.u3;
break;
default:
/* Outport: '<Root>/y1' incorporates:
* Inport: '<Root>/u4'
*/
rtY.y1 = rtU.u4;
break;
}
/* End of MATLAB Function: '<Root>/MATLAB Function' */
}
If a MATLAB Function block or a Stateflow chart uses if-elseif-else decision logic, you can convert the block or chart to a switch statement by using a configuration parameter. Select the Configuration Parameters > Code Generation > Code Style > Convert if-elseif-else patterns to switch-case statements parameter. For more information, see Converting If-Elseif-Else Code to Switch-Case Statements. For more information on this conversion by using a Stateflow chart, see Enhance Readability of Code for Flow Charts.