MISRA Discussion Forums

Full Version: Clarification for 7–5–1
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Quote:A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function.

I have a question about reference types. Is the following code compliant or not?


Code:
int global_var;

int & foo(int & ref) {
    return ref;             // Compliant?
    
    int & global_ref = global_var;
    return global_ref;      // Compliant?
    
    int local_var;
    int & local_ref = local_var;
    return local_ref;       // Compliant?
}

int * bar(int & ref) {
    return &ref;            // Compliant?

    int & global_ref = global_var;
    return &global_ref;     // Compliant?
    
    int local_var;
    int & local_ref = local_var;
    return &local_ref;      // Compliant?
}
In foo() and bar():
  • The first return is compliant with 7-5-1 but breaks 7-5-3.
  • The second return is compliant as the object is global.
  • The third return is non-compliant.