C and C++


LANG.ID.ND.MM : Non-distinct Identifiers: Macro/Macro

Summary

Two or more macro names have the same first N (case-sensitive) characters, where N depends on the setting of SIGNIFICANCE_LEN_MACRO.

See Identifier Classes for related warning classes.

Properties

Class Name Non-distinct Identifiers: Macro/Macro
Significance style
Mnemonic LANG.ID.ND.MM
Categories
MisraC2023 MisraC2023:5.4 Macro identifiers shall be distinct
Misra2012 Misra2012:5.4 Macro identifiers shall be distinct
Misra2004 Misra2004:5.1 Identifiers (internal and external) shall not rely on the significance of more than 31 characters
CWE CWE:710 Improper Adherence to Coding Standards
CERT-C 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.
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: Macro/Macro"
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_MACRO=-1.

/* pair 1:  distinct in first 31 characters */
#define macroneitherA 1
#define macroneitherB 1

/* pair 2: distinct in first 63 characters; not distinct in first 31 characters
 *  - 'Non-distinct Identifiers: Macro/Macro' warning issued for C90 only */
#define macroc90only123456789012345678901234567890A 1
#define macroc90only123456789012345678901234567890B 1

/* pair 3: not distinct in first 63 characters
 *  - 'Non-distinct Identifiers: Macro/Macro' warning issued for both C90 and C99 */
#define macroboth123456789012345678901234567890123456789012345678901234567890A 1
#define macroboth123456789012345678901234567890123456789012345678901234567890B 1

Relevant Configuration File Parameters

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