C and C++


LANG.STRUCT.DECL.NOEXT : Missing External Declaration

Summary

An identifier with external linkage has no associated non-defining extern declaration.

Properties

Class Name Missing External Declaration
Significance style
Mnemonic LANG.STRUCT.DECL.NOEXT
Categories
MisraC2023 MisraC2023:8.5 An external object or function shall be declared once in one and only one file
Misra2012 Misra2012:8.5 An external object or function shall be declared once in one and only one file
Misra2004 Misra2004:8.8 An external object or function shall be declared in one and only one file
AUTOSARC++14 AUTOSARC++14:M3-2-3 A type, object or function that is used in multiple translation units shall be declared in one and only one file.
MisraC++2008 MisraC++2008:3-2-3 A type, object or function that is used in multiple translation units shall be declared in one and only one file.
CERT-C CERT-C:DCL36-C Do not declare an identifier with conflicting linkage classifications
JSF++ JSF++:40 Every implementation file shall include the header files that uniquely define the inline functions, types, and templates used.
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
INCREMENTAL_BUILD = No
WARNING_FILTER += allow class="Missing External 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.

Incrementality Note: This warning class is not available for incremental analyses, even if the class is explicitly enabled.

Example

Suppose the project consists of LANG.STRUCT.DEF.NOEXT.a.c and LANG.STRUCT.DEF.NOEXT.b.c.

/* LANG.STRUCT.DECL.NOEXT.a.c */

extern int i_def;
extern int f_def(int i);
/* LANG.STRUCT.DECL.NOEXT.b.c */

int i_nodef = 3;               /* 'Missing External Declaration' warning issued here */
int i_def = 4;                 /* declared extern in fileA.c */
int f_nodef(int i){return i;}  /* 'Missing External Declaration' warning issued here */
int f_def(int i){return i;}    /* declared extern in fileA.c n*/

Relevant Configuration File Parameters

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