4 ms·
MISRA 2004, Rule 14.7: "A function shall have a single point of exit at the end of the function.", required - https://www.ibm.com/docs/en/rtr/9.0.0?topic=review
by eesmith 3y ago
MISRA 2004, Rule 14.7: "A function shall have a single point of exit at the end of the function.", required - https://www.ibm.com/docs/en/rtr/9.0.0?topic=review-code-misra-2004-rules https://www.ibm.com/docs/en/rtr/9.0.0?topic=review-code-misr...
MISRA 2012, Rule 15.5: "Only one exit point should be defined in a function.", advisory - https://www.ibm.com/docs/en/rtr/9.0.0?topic=review-code-misra-2012-rules https://www.ibm.com/docs/en/rtr/9.0.0?topic=review-code-misr...
HN users cordenr and bfrog say it was dropped in MISRA 2023: https://news.ycombinator.com/item?id=38680587 https://news.ycombinator.com/item?id=38680587 and https://news.ycombinator.com/item?id=38704631 https://news.ycombinator.com/item?id=38704631 . Both in a recent thread on MISRA 2023 at https://news.ycombinator.com/item?id=38674158 https://news.ycombinator.com/item?id=38674158 .
FWIW, HN user FirmwareBurner in that thread links to the "Embedded System development Coding Reference guide" version 3.0 (2018) from the Software Reliability Enhancement Center, Japan at https://www.ipa.go.jp/publish/qv6pgp00000011mh-att/000065271.pdf https://www.ipa.go.jp/publish/qv6pgp00000011mh-att/000065271... which says
M3.1.5:
A function shall end with one return statement.
A return statement to return in the middle of processing shall
be written only in case of recovery from abnormality.
- tirpen 3y agoI was not aware of the changes in MISRA-2023, thanks for informing me! Also, that's great news to hear in case I ever want to go back to the automotive industry. :)
- WesolyKubeczek 3y agoWell, aren't early returns in guard clauses "recovery from abnormality"? You could flex some language lawyering to define "abnormality"...
- aulin 3y agoI believe that's exactly it. An exception to the single return rule to allow for guard clauses. Wording is maybe a little too obscure though.
- eesmith 3y agoI don't know. Here is the only relevant example I found: p = X_MALLOC(sizeof(*p) * NUM); if (p == NULL) { return (MEM_NOTHING); } ... X_FREE(p); return (OK); It's clearly abnormal. Something like a: if (get_size(obj) == 0) { return empty_case; } ... do more complicated code here ... return result; does not feel "abnormal", which are things you likely want to log, given: Logs should be output not only when an abnormal condition is detected, but also at the timing of, such as, data communication with an external system.