C and C++


LANG.ID.ND.MO : Non-distinct Identifiers: Macro/Other

Summary

A (non-macro) identifier has the same first N (case-sensitive) characters as one or more macro names, where N depends on the setting of SIGNIFICANCE_LEN_MACRO.

See Identifier Classes for related warning classes.

Properties

Class Name Non-distinct Identifiers: Macro/Other
Significance style
Mnemonic LANG.ID.ND.MO
Categories
MisraC2023 MisraC2023:5.5 Identifiers shall be distinct from macro names
Misra2012 Misra2012:5.5 Identifiers shall be distinct from macro names
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
INCREMENTAL_BUILD = No
WARNING_FILTER += allow class="Non-distinct Identifiers: Macro/Other"
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 SIGNIFICANCE_LEN_MACRO=-1.

#define MOneitherA                                        /* distinct in first 31 characters */

/* MOc90only123456789012345678901234567890A and
 * MOc90only123456789012345678901234567890B
 * are distinct in first 63 characters; not distinct in first 31 characters
 */
#define MOc90only123456789012345678901234567890A 1

/* MOboth123456789012345678901234567890123456789012345678901234567890B
 * and
 * MOboth123456789012345678901234567890123456789012345678901234567890B
 * are not distinct in first 63 characters
 */
#define MOboth123456789012345678901234567890123456789012345678901234567890A 1

extern int MOneitherB;                                    /* distinct in first 31 characters */

/* 'Non-distinct Identifiers: Macro/Other' warning issued on following line for C90 only */
void lang_id_nd_mo(int MOc90only123456789012345678901234567890B){
    /* 'Non-distinct Identifiers: Macro/Other' warning issued on following line for both C90 and C99 */
    int MOboth123456789012345678901234567890123456789012345678901234567890B;
    /* ... */
}

Relevant Configuration File Parameters

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