Why netinet/in.h defines constants this way?
enum
{
IPPROTO_IP = 0,
#define IPPROTO_IP IPPROTO_IP
IPPROTO_HOPOPTS = 0,
#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
IPPROTO_ICMP = 1,
#define IPPROTO_ICMP IPPROTO_ICMP
IPPROTO_IGMP = 2,
...
};