其中一个分支switch-case
包含对未标有 . 的不可返回函数(设备重启)的调用[[noreturn]]
。它是一个图书馆(OSRV MAX)。这是一个代码片段:
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
,那么会有一个警告“Not all code branches return a value”。如果你什么都不写,静态分析器会警告你掉落。当然,您可以在这里写一个属性[[fallthrough]]
,但事实并非如此。那怎么对呢?
包裹在一个真正不返回的函数中:
然后它被称为:
return
例如,另一种选择是在此处添加return {};
。