The usual term used for the latter would be "macro" or more specifically "object-like macro".
One reason why I would not call macros "symbolic variables" has to do with an advantage of enums such that you read that recommendation: after macro replacement, the symbolic name is gone, hence you may find that when you observe your program in a debugger, the symbolic names associated with enums remain, but you only see the replaced value with macros. This is an advantage in favour of the use of enums.
The thing is though, enums don't exist solely for named constants to be defined. Rather, they (rather loosely) form a new type that is intended to have only those enumerated values. Consequently, it is most appropriate to create an enum to enumerate (duh) some list of
related constants, especially where the actual values matter less than the fact that they are unique (hence the behaviour of subsequently declared values being incremented automatically). Of course, this does not mean that it is inappropriate to specify particular values, or that we cannot have duplicate values, but if we do this, then we need to take extra care that we really do have an "enumeration" and not merely a disparate list of named constants.
In your case, I would probably have an enum for the digital pins, e.g.,
Code:
enum DigitalPin {
CURCUIT = 2,
GREEN_LED,
RED_LED_ONE,
RED_LED_TWO
};
But I would keep TIMER as a macro since it is a separate constant. Or, seeing that you do not use TIMER to specify the size of an array, perhaps it would be appropriate to write:
Code:
const int TIMER = 500;
If you really do want TIMER to be an enumerator, then it should be in an enumeration separate from the digital pins enumeration.