switch语法
switch (func_cb.sta)
switch后续跟随多个成对的case和break,分别包含if/endif判断语句
每个 case 后跟一个要比较的值和一个冒号,当被测试的变量等于 case 中的常量时,case下一行的语句将被执行
switch 语句可以嵌套。 嵌套时,case 或 default 标签将与封装它们的最近的 switch 语句关联。
default case 用于上面所有 case 都不为真时执行一个任务,default case 中的 break 语句不是必需的。
default 标签只能出现一次。 default 语句通常放在末尾,但它可以出现在 switch 语句正文中的任何位置。
case 或 default 标签只能显示在 switch 语句内部。
break
没有break,程序将一直向下执行
遇到break语句,执行switch语句的下一行
case的数量
C++ 未限制 switch 语句中 case 值的数量。
该数量仅受可用内存的限制
源程序实例:
func_run函数中依次调用了多个功能函数,构成一个主循环,。
void func_run(void)
{
printf("%s\n", __func2__);
while (1) {
func_enter(); //
switch (func_cb.sta) {
#if FUNC_MUSIC_EN
case FUNC_MUSIC:
func_music();
break;
#endif // FUNC_MUSIC_EN
#if FUNC_FMRX_EN
case FUNC_FMRX:
func_fmrx();
break;
#endif // FUNC_FMRX_EN
#if FUNC_CLOCK_EN
case FUNC_CLOCK:
func_clock();
break;
#endif // FUNC_CLOCK_EN
#if FUNC_BT_EN
case FUNC_BT:
func_bt();
break;
#endif
#if FUNC_BTHID_EN
case FUNC_BTHID:
func_bthid();
break;
#endif // FUNC_BTHID_EN
#if FUNC_AUX_EN
case FUNC_AUX:
func_aux();
break;
#endif // FUNC_AUX_EN
#if FUNC_USBDEV_EN
case FUNC_USBDEV:
func_usbdev();
break;
#endif
#if FUNC_SPDIF_EN
case FUNC_SPDIF:
func_spdif();
break;
#endif // FUNC_SPDIF_EN
#if FUNC_FMAM_FREQ_EN
case FUNC_FMAM_FREQ:
func_fmam_freq();
break;
#endif // FUNC_FMAM_FREQ_EN
#if FUNC_SPEAKER_EN
case FUNC_SPEAKER:
func_speaker();
break;
#endif // FUNC_SPEAKER_EN
#if FUNC_I2S_EN
case FUNC_I2S:
func_i2s();
break;
#endif // FUNC_I2S_EN
#if FUNC_IDLE_EN
case FUNC_IDLE:
func_idle();
break;
#endif // FUNC_IDLE_EN
case FUNC_PWROFF:
func_pwroff(sys_cb.pwrdwn_tone_en);
break;
case FUNC_SLEEPMODE:
func_sleepmode();
break;
#if IODM_TEST_MODE
case FUNC_BT_CBT:
func_bt_cbt();
break;
case FUNC_BT_FCC:
func_bt_fcc();
break;
#endif // IODM_TEST_MODE
#if EX_SPIFLASH_SUPPORT
case FUNC_EXSPIFLASH_MUSIC:
func_exspifalsh_music();
break;
#endif
#if FUNC_HDMI_EN
case FUNC_HDMI:
func_hdmi();
break;
#endif
default:
func_exit();
break;
}
}
}