MISRA Discussion Forums

Full Version: Doubts about Rule 21.3 and 21.8
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

We have some doubts about Rule 21.3 and Rule 21.8, please help clarify

Rule 21.3 The memory allocation and deallocation functions of shall not be used
Rule 21.8 The library functions abort, exit, getenv and system of shall not be used

From the titles and Rationale of these two rules, they are talking about only functions with the forbidden identifiers, but in the Amplification of these two rules, all these identifiers and macros are forbidden including using these identifiers to define variables or fields of structs. So my question is that can we use these identifiers in the following cases:

int free = 0; //Violate Rule 21.3?
struct s {
    int free;   //Violate Rule 21.3?
    int malloc; //Violate Rule 21.3?
    int exit; //Violate Rule 21.8?

Please help clarify, thanks a lot!
Also, how about accessing the fields with the forbidden identifiers of a struct, like

printf("%s %c %d %f %f\n", p.name, p.free, p.exit, p.height, p.weight); //Violate Rule 21.3(free) and Rule 21.8(exit)?
Rule 21.3 restricts the use of the functions malloc etc: as defined in stdlib.h. The amplification recognises that malloc etc: may be implemented either as a function or as macro in stdlib.h. The same comment applies to rule 21.8. None of your examples violate rule 21.3 or rule 21.8.

However your examples do violate rule 21.2 as they are declarations of reserved identifiers. The Amplification of rule 21.1 (referred to in rule 21.2) includes in its list of reserved identifiers the "identifiers in file scope described in Section 7, Library" of The Standard. Rule 21.2 applies even if stdlib.h is not included.