Main Content

MISRA C++:2008 Rule 3-1-2

Functions shall not be declared at block scope

Description

Rule Definition

Functions shall not be declared at block scope.

Rationale

Declaring a function within a block is equivalent to declaring the function at the scope of the enclosing namespace. A function declaration at the block scope can be parsed as an object declaration by a human reader whereas it is always parsed as a function declaration by a compiler. Such misinterpretation of the code can cause unexpected results.

Declaring function at block scope can make the code difficult to maintain. Avoid such declarations.

Polyspace Implementation

Polyspace® reports a violation of this rule if functions not declared at the file scope.

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

class ResourceType {
      int aMember;
    public:
      int getMember();
};

void getResource() {
    ResourceType aResource();      //Noncompliant
}

In this example, a human reader might interprets ResourceType aResource() as an object declaration while the compiler interprets ResourceType aResource() as a function declaration.

Check Information

Group: Basic Concepts
Category: Required

Version History

Introduced in R2013b