Main Content

MISRA C++:2008 Rule 16-2-6

The #include directive shall be followed by either a <filename> or "filename" sequence

Description

Rule Definition

The #include directive shall be followed by either a <filename> or "filename" sequence.

Rationale

This rule applies only after macro replacement.

The code behavior is undefined if an #include directive does not use one of these forms:

  • #include <filename>

  • #include "filename"

Using other forms of #include directives is not permitted by ISO/IEC 14882:2003. To avoid unexpected behavior, avoid using malformed #include statements.

Polyspace Implementation

Polyspace® raises a violation of this rule if an #include directive is not followed by either <filename> or "Filename".

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

#include"incguard.h" //Compliant
#include<incguard.h> //Compliant

#define MH "myheader.h"
#define STR <string>
#include MH //Compliant
#include STR //Compliant

#include myfile.h //Noncompliant

In this example, Polyspace flags the directive that attempts to include myfile.h because it does not follow either of the permissible forms. The other directives follow the permissible forms after applicable macro replacements.

Check Information

Group: Preprocessing Directives
Category: Required

Version History

Introduced in R2013b