主要内容

MISRA C++:2023 Rule 21.10.1

The features of <cstdarg> shall not be used

自 R2024b 起

描述

The features of <cstdarg> shall not be used. 1

理由

该规则禁止使用 va_listva_argva_startva_endva_copy

您可以按照 C++ 标准中未定义的方式使用这些特征。例如:

  • 您在函数中调用了 va_start,但在函数模块结束之前没有调用对应的 va_end

  • 您在不同的函数中对 va_list 类型的同一个变量调用了 va_arg

  • va_arg 的语法为 type va_arg (va_list ap, type)

    您使用与从 ap 检索到的参量的实际类型不兼容的 type 调用 va_arg

Polyspace 实现

如果您从 <sstdarg> 中使用以下任何函数,则检查项会报告违规:va_listva_argva_startva_endva_copy

故障排除

如果您预期会出现违规,而 Polyspace® 未报告该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开

#include<cstdarg>
void f2(int n, ...) {
    int i;
    double val;
    va_list vl;                         /* Non-compliant */

    va_start(vl, n);                    /* Non-compliant */

    for(i = 0; i < n; i++)
    {
        val = va_arg(vl, double);         /* Non-compliant */
    }

    va_end(vl);                         /* Non-compliant */
}

在此示例中,因为使用了 va_startva_listva_argva_end,所以违反了该规则。

检查信息

组:语言支持库
类别:必需
PQL 名称:std.misra_cpp_2023.R21_10_1

版本历史记录

在 R2024b 中推出


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.