主要内容

MISRA C:2023 Rule 15.5

A function should have a single point of exit at the end

自 R2024a 起

描述

规则定义

A function should have a single point of exit at the end 1 .

理由

此规则要求 return 语句必须作为函数体中的最后一条语句出现。否则,可能会发生以下问题:

  • 位于 return 语句之后的代码可能会被无意中忽略。

  • 如果一个函数修改其部分参数且较早包含 return 语句,那么在阅读代码时,无法立即清楚地判断哪些修改会实际发生。

故障排除

如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开

#define MAX ((unsigned int)2147483647)
#define NULL (void*)0

typedef unsigned int bool_t;
bool_t false = 0;
bool_t true = 1;

bool_t f1(unsigned short n, char *p) {          /* Non-compliant */
    if(n > MAX) {
        return false;
    }

    if(p == NULL) {
        return false;
    }

    return true;
}

此示例违反了该规则,因为存在三个 return 语句。

更正 - 使用变量来存储返回值

一种可能的更正方法是,先将返回值存储在一个变量中,然后恰好在函数结束前再返回此变量。

#define MAX ((unsigned int)2147483647)
#define NULL (void*)0

typedef unsigned int bool_t;
bool_t false = 0;
bool_t true = 1;
bool_t return_value;

bool_t f2 (unsigned short n, char *p) {         /* Compliant */
    return_value = true;
    if(n > MAX) {
        return_value = false;
    }

    if(p == NULL) {
        return_value = false;
    }

    return return_value;
}

检查信息

组:控制流
类别:建议
AGC 类别:建议

版本历史记录

在 R2024a 中推出

全部展开


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.