Один заголовок socket.h в моей системе Linux выглядит следующим образом.
/* Bits in the FLAGS argument to `send', `recv', et al.  */
enum
  {
    MSG_OOB             = 0x01, /* Process out-of-band data.  */
#define MSG_OOB         MSG_OOB
    MSG_PEEK            = 0x02, /* Peek at incoming messages.  */
#define MSG_PEEK        MSG_PEEK
    MSG_DONTROUTE       = 0x04, /* Don't use local routing.  */
#define MSG_DONTROUTE   MSG_DONTROUTE
...
Определение enum является своего рода идиомой для создания констант типа-safe-ish в C, что язык действительно рассматривает как константы времени компиляции.
Мой вопрос: в чем заключается назначение макросов MSG_OOB, MSG_PEEK,... которые расширяются до себя?