Ответ 1
Как сказано в другом ответе Мэтью Слейтер в руководстве GCC есть раздел, а именно §3.10.5 Self-Referential Macros, в котором описывается возможное использование таких макросов.
Одно из возможных способов использования - избегать бесконечного расширения, когда макрос расширяется в вызов самому себе, но это отвратительная практика. Другое использование - определить как макросы препроцессора, так и перечисления:
Вы можете сделать это, если хотите определить числовые константы с перечислением, но для каждой константы будет иметь значение #ifdef.
Итак, это в основном то, что M.M сказал в приведенном выше комментарии.
Это, по-видимому, подтверждено этим патчем:
< напыщенная > Почему разработчики ядра ведут себя так непоследовательно? Я много предпочитают интерфейсы, где значение перечисления добавляется как , чтобы было легко проследить, какие функции доступны в текущий набор заголовков.
Действительно разочаровывающая часть - это некоторые из значений перечисления в этом set имеют #defines, а некоторые из них - нет.