Main Content

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

Functions shall not be defined using the ellipsis notation

Description

Rule Definition

Functions shall not be defined using the ellipsis notation.1

Rationale

The ellipsis notation allows you to define a function that accepts a variable number of arguments. However, the compiler does not check the type and number of arguments at compile time. This can lead to undefined behavior if the number of arguments or the argument types are different than expected.

Polyspace Implementation

Polyspace® reports a violation of this rule when your code uses ellipsis notation in a function definition.

Troubleshooting

If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

In this code, the function printNumbers() uses ellipsis notation to allow the function to take an indeterminate number of additional arguments.

#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;
}

Check Information

Group: Declarators
Category: Required

Version History

Introduced in 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.