主要内容

MISRA C:2023 Rule 8.10

An inline function shall be declared with the static storage class

自 R2024a 起

描述

规则定义

An inline function shall be declared with the static storage class 1 .

理由

如果调用一个使用外部链接声明但未在同一转换单元中定义的内联函数,该函数可能不会被内联。您可能实现不了您期望通过内联实现的执行时间缩短。

如果希望一个内联函数可供多个转换单元使用,您仍然可以使用 static 设定符来定义它。在这种情况下,应将定义放在一个头文件中。在所有希望内联该函数的文件中包括该头文件。

Polyspace 实现

规则检查项会标记那些包含 inline 设定符但没有相应 static 设定符的定义。

故障排除

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

示例

全部展开

inline double mult(int val);
inline double mult(int val) {   /* Non compliant */
    return val * 2.0;
}

static inline double div(int val);
static inline double div(int val) {  /* Compliant */
    return val / 2.0;
}

在此示例中,mult 的定义不合规,因为它在内联时没有使用 static 存储设定符。

检查信息

组:声明和定义
类别:必需
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.