主要内容

MISRA C++:2008 Rule 8-4-1

Functions shall not be defined using the ellipsis notation

描述

规则定义

Functions shall not be defined using the ellipsis notation. 1

理由

使用省略号表示法可以定义一个接受可变数量参量的函数。不过,编译器在编译时不会检查参量的类型和数量。如果参量的数量或类型与预期不符,这可能会导致未定义行为。

Polyspace 实现

当您的代码在函数定义中使用省略号表示法时,Polyspace® 会报告违反了此规则。

故障排除

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

示例

全部展开

在这段代码中,函数 printNumbers() 使用了省略号表示法,从而允许该函数接收不确定数量的附加参量。

#include <cstdarg>
#include <iostream>

void printNumbers(int count, ...) {		//Noncompliant
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        int number = va_arg(args, int);
        std::cout << number << " ";
    }
    va_end(args);
}

int main() {
    printNumbers(3, 10, 20, 30); 
    return 0;
}

检查信息

组:声明符
类别:必需

版本历史记录

在 R2013b 中推出


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.