C and C++


LANG.STRUCT.DEF.MULTIEXT : Multiple External Definitions

Summary

An identifier with external linkage has more than one associated definition.

Properties

Class Name Multiple External Definitions
Significance style
Mnemonic LANG.STRUCT.DEF.MULTIEXT
Categories
MisraC2023 MisraC2023:8.6 An identifier with external linkage shall have exactly one external definition
Misra2012 Misra2012:8.6 An identifier with external linkage shall have exactly one external definition
Misra2004 Misra2004:8.9 An identifier with external linkage shall have exactly one external definition
AUTOSARC++14 AUTOSARC++14:M3-2-2 The One Definition Rule shall not be violated.
  AUTOSARC++14:M3-2-4 An identifier with external linkage shall have exactly one definition.
MisraC++2008 MisraC++2008:3-2-2 The One Definition Rule shall not be violated.
  MisraC++2008:3-2-4 An identifier with external linkage shall have exactly one definition.
MisraC++2023 MisraC++2023:6.2.1 The one-definition rule shall not be violated
  MisraC++2023:6.2.3 The source code used to implement an entity shall appear only once
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="Multiple External Definitions"
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.MULTIEXT.a.c, LANG.STRUCT.DEF.MULTIEXT.b.c, and LANG.STRUCT.DEF.MULTIEXT.c.c.

/* LANG.STRUCT.DEF.MULTIEXT.b.c */

extern int i_onedef;
extern int i_twodef;
extern int f_onedef( int i);
extern int f_twodef( int i);
/* LANG.STRUCT.DEF.MULTIEXT.b.c */

int i_twodef = 3;
int f_twodef( int i){return i;}
/* LANG.STRUCT.DEF.MULTIEXT.c.c */

int i_onedef = 7;                                       /* only definition of i_onedef */
int i_twodef = 8;               /* 'Multiple External Definitions'  warning issued here */ 
int f_onedef( int i){return i;}                         /* only definition of f_onedef() */
int f_twodef( int i){return i;} /* 'Multiple External Definitions' warning issued here
                                 * (even though the two definitions are identical) */

Relevant Configuration File Parameters

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