Why is the MISRA-C:2012 directive D4.10 raised on #pragma once?

56 views (last 30 days)
The MISRA-C:2012 directive 4.10 says that "Precautions shall be taken in order to prevent the contents of a header file being included more than once."
In C it is possible to prevent header file to be included more than once thanks to the pragma #pragma once.
But Polyspace will raise a violation of D4.10 on this pragma. Why?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 22 Feb 2019
The #pragma once directive, even if supported by most of the compilers, is not part of the C standard.
It is then “implementation-defined”, and in some corner cases, where copied include files or include files with same name are in different include directories, it can lead to unintended behavior.
The MISRA-C:2012 standard does not list this pragma in the description of the directive D4.10.
The two forms given in the standard are:
#if !defined ( identifier )
#define identifier
...
#endif
and
#ifndef identifier
#define identifier
...
#endif
Polyspace follows the MISRA-C:2012 standard and does not consider #pragma once as a valid include guard.

More Answers (0)

Tags

No tags entered yet.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!