Как правильно оформить switch, содержащий noreturn-функцию?
В одной из ветвей switch-case содержится вызов невозвратной функции (перезагрузка устройства), которая не помечена атрибутом [[noreturn]]. Она библиотечная (ОСРВ МАКС). Вот фрагмент кода:
ALARM_ACTION MyApp::OnAlarm(ALARM_REASON reason)
{
switch (reason)
{
case AR_STACK_OVERFLOW:
return AA_RESTART_TASK;
case AR_NMI_RAISED:
case AR_HARD_FAULT:
System::McuReset(); //Фактически - noreturn, но не помечена атрибутом
//?
default:
return Application::OnAlarm(reason);
}
}
Собственно, что написать на месте вопроса? Если написать break, то будет предупреждение "Не все ветви кода возвращают значение". Если не писать ничего, то будет предупреждение статического анализатора о fallthrough. Можно, конечно, написать здесь атрибут [[fallthrough]], но это неправда. А как тогда правильно?
Ответы (2 шт):
Автор решения: user7860670
→ Ссылка
Заворачивается в функцию, которая реально noreturn:
[[noreturn]] void MyMcuReset(void)
{
System::McuReset();
::std::abort();
}
И потом вызывается она:
case AR_HARD_FAULT: MyMcuReset();