C and C++


LANG.STRUCT.DECL.MISSINGDECL : No Previous Declaration

Summary

A function or object with external linkage is defined, but has no visible (non-defining) declaration.

Properties

Class Name No Previous Declaration
Significance style
Mnemonic LANG.STRUCT.DECL.MISSINGDECL
Categories
MisraC2023 MisraC2023:8.4 A compatible declaration shall be visible when an object or function with external linkage is defined
Misra2012 Misra2012:8.4 A compatible declaration shall be visible when an object or function with external linkage is defined
Misra2004 Misra2004:8.1 Functions shall have prototype declarations and the prototype shall be visible at both the function definition and call
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="No Previous Declaration"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

extern void f1(void);
void f1(void) {}                          /* ok: previously declared */

static void f2(void) {}                   /* ok: no external linkage */

void f3(void) {}           /* 'No Previous Declaration' warning issued here
                            * - there is no (non-defining) declaration for func3()
                            */

void f4(void) {}           /* 'No Previous Declaration' warning issued here
                            * - there is a declaration, but it is after this definition
                            */
extern void f4(void);

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.