Main Content

MISRA C:2023 Rule 20.3

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

Since R2024a

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 behavior is undefined if an #include directive does not use one of the following forms:

  • #include <filename>

  • #include "filename"

Polyspace Implementation

Polyspace® reports a violation of this rule if an #include directive is not followed by either <file> or "filename", where:

  • <file> is a valid header file

  • "filename" is the name of a file or a path to a file

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

This examples shows compliant #include directives that follow the permissible forms. Polyspace does not report a violation if the #include follows a permissible form after macro replacement.

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

This example shows a noncompliant #include directive. The header file name is not enclosed in quotes or angular brackets.

#include myfile.h       //Noncompliant

This example shows a noncompliant #include directive. The header file name is enclosed in mismatched enclosures.

#include "math.h>       //Noncompliant

Check Information

Group: Preprocessing Directives
Category: Required
AGC Category: Required

Version History

Introduced in R2024a