I have spotted something in C header files what I can't figure out what is for. For example in file bits/socket.h
there is an enumeration type enum __socket_type
, but after every enumerator there is a define macro which defines the same. Example:
enum __socket_type
{
SOCK_STREAM = 1,
#define SOCK_STREAM SOCK_STREAM
...
};
I have been unable to find out what this is for. Please enlighten me. I don't even know how to form right question for querying google nor this site search box.
In computer programming, an enumerated type (also called enumeration, enum, or factor in the R programming language, and a categorical variable in statistics) is a data type consisting of a set of named values called elements, members, enumeral, or enumerators of the type.
An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type. To define an enumeration type, use the enum keyword and specify the names of enum members: C# Copy.
An enumerated type is a type whose legal values consist of a fixed set of constants. Common examples include compass directions, which take the values North, South, East and West and days of the week, which take the values Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.
CA1069: Enums should not have duplicate values.
A prepreprocessor macro will never expand recursively, so what such a #define
does is leave the name in place whereever it is used. Such things are useful when you want to have a preprocessor feature test.
#ifdef SOCK_STREAM
..
#endif
can be used to conditionally compile some code afterwards.
Edit: So this combines the cleaner approach of enumerations (implicit values without collisions and scoping) with preprocessor tests.
The only thing I can think of is because people see a constant in all-caps, say NUM_FILES
, they'll think it's a macro and are tempted to write this:
#ifdef NUM_FILES
Now normally this would fail, but if you write #define NUM_FILES NUM_FILES
it behaves as a macro for the preprocessor and IDE's and as an enum for the code itself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With