メインコンテンツ

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_end および va_copy の使用はルールにより禁止されています。

これらの機能は C++ 標準で動作が定義されていない方法で使用できます。次に例を示します。

  • va_start を関数内で呼び出すが、関数ブロックの終了前に対応する va_end を呼び出さない。

  • va_list 型の同じ変数に対し、異なる関数内で va_arg を呼び出す。

  • va_arg が構文 type va_arg (va_list ap, type) をもつ。

    ap から取得する引数の実際の型と互換性がない typeva_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_arg および va_end が使用されているため、ルールに違反します。

チェック情報

グループ: Language Support Library
カテゴリ: Required

バージョン履歴

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.