In a header file in.h one can see this pattern:
enum {
IPPROTO_IP = 0, /* Dummy protocol for TCP */
#define IPPROTO_IP IPPROTO_IP
IPPROTO_ICMP = 1, /* Internet Control Message Protocol */
#define IPPROTO_ICMP IPPROTO_ICMP
What the reason for redefinition of already defined symbol? If I understand correctly, when preprocessor encounter IPPROTO_ICMP, it will replace it with IPPROTO_ICMP, so nothing will change.