If a value is defined as
#define M_40 40
Is the size the same as a short
(2 bytes) or is it as a char
(1 byte) or
The preprocessor just does simple text substitution, so the fact that your constant is in a #define
doesn't matter. All the C standard says is that "Each constant shall have a type and the value of a constant shall be in the range of representable values for its type." C++ is likely to not vary too much from that.