...
Enumeration Constants
Enumeration constant constants can be used to represent an integer constant expression that has a value representable as an int
. Unlike const
-qualified objects, enumeration constants do not require allocated consume memory. No storage is allocated for the value so it is not possible to take the address of an enumeration constant.
Code Block |
---|
enum { max = 15 }; int a[max]; /* OK outside function */ const int *p; p = &max; /* error: '&' on enum constant */ |
Enumeration constants do not allow the type of the value to be specified. An enumeration constant whose value can be represented as an int
is always an int
.
...
Macro names do not observe the scope rules that apply to other names. Consequently, macros might substitute in unexpected unanticipated places with unanticipated unexpected results.
Object-like macros do not consume memory, and consequently, it is not possible to create a pointer to one. Macros do not provide for type checking, as they are textually replaced by the preprocessor.
...