C and C++


LANG.PREPROC.MDC : Macro Defines Constant

Summary

A macro is defined (with #define) to a simple literal constant.

Properties

Class Name Macro Defines Constant
Significance style
Mnemonic LANG.PREPROC.MDC
Categories
CWE CWE:1076 Insufficient Adherence to Expected Conventions
JSF++ JSF++:30 The #define pre-processor directive shall not be used to define constant values. Instead, the const qualifier shall be applied to variable declarations to specify constant values.
  JSF++:31 The #define pre-processor directive will only be used as part of the technique to prevent multiple inclusions of the same header file.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Macro Defines Constant"

Example

#define TAXI 1729     /* 'Macro Defines Constant' warning issued here */
#define MYSTR "hello" /* 'Macro Defines Constant' warning issued here */
#define INDIR TAXI               /* not a simple literal constant */
#define TWO 1+1                  /* not a simple literal constant */
#define PARENS (1)               /* not a simple literal constant */

Relevant Configuration File Parameters

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