C and C++


LANG.ID.ND.NEST : Non-distinct Identifiers: Nested Scope

Summary

An identifier in an inner scope is not distinct from an identifier in an outer scope.

Specifically, two or more identifiers have the same first N (case-sensitive) characters, where:

See Identifier Classes for related warning classes.

Properties

Class Name Non-distinct Identifiers: Nested Scope
Significance style
Mnemonic LANG.ID.ND.NEST
Categories
MisraC2023 MisraC2023:5.3 An identifier declared in an inner scope shall not hide an identifier declared in an outer scope
Misra2012 Misra2012:5.3 An identifier declared in an inner scope shall not hide an identifier declared in an outer scope
Misra2004 Misra2004:5.1 Identifiers (internal and external) shall not rely on the significance of more than 31 characters
  Misra2004:5.2 Identifiers in an inner scope shall not use the same name as an identifier in an outer scope, and therefore hide that identifier
AUTOSARC++14 AUTOSARC++14:A1-1-1 All code shall conform to ISO/IEC 14882:2014 - Programming Language C++ and shall not use deprecated features.
  AUTOSARC++14:A2-10-1 An identifier declared in an inner scope shall not hide an identifier declared in an outer scope.
MisraC++2008 MisraC++2008:2-10-2 Identifiers declared in an inner scope shall not hide an identifier declared in an outer scope.
MisraC++2023 MisraC++2023:6.4.1 A variable declared in an inner scope shall not hide a variable declared in an outer scope
CWE CWE:710 Improper Adherence to Coding Standards
CERT-C CERT-C:DCL01-C Do not reuse variable names in subscopes
  CERT-C:DCL23-C Guarantee that mutually visible identifiers are unique
JSF++ JSF++:46 User-specified identifiers (internal and external) will not rely on significance of more than 64 characters.
  JSF++:135 Identifiers in an inner scope shall not use the same name as an identifier in an outer scope, and therefore hide that identifier.
JPL JPL:13 Declare data objects at smallest possible level of scope.
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="Non-distinct Identifiers: Nested Scope"
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

Suppose SIGNIFICANCE_LEN_OTHER=-1.

static void nestneitherA(void);                                           /* distinct in first 31 characters */

/* nestc90only123456789012345678901234567890A and
 * nestc90only123456789012345678901234567890B
 * are distinct in first 63 characters; not distinct in first 31 characters
 */
extern int nestc90only123456789012345678901234567890A;

/* nestboth123456789012345678901234567890123456789012345678901234567890A
 * and nestboth123456789012345678901234567890123456789012345678901234567890B
 * are not distinct in first 63 characters
 */
static  int nestboth123456789012345678901234567890123456789012345678901234567890A;

static void lang_id_nd_nest(int nestneitherB){                             /* distinct in first 31 characters */
  /* 'Non-distinct Identifiers: Nested Scope' warning issued on following line for C90 only */
  double nestc90only123456789012345678901234567890B;

  struct { int x; int y;}
        /* 'Non-distinct Identifiers: Nested Scope' warning issued on following line for both C90 and C99 */
        nestboth123456789012345678901234567890123456789012345678901234567890B;
  /* ... */
}

Relevant Configuration File Parameters

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