@ sbi уже говорил о генерации кода, поэтому позвольте мне привести пример.
Скажите, что у вас есть перечисление множества элементов, и что вы хотите сгенерировать набор функций для каждого из его элементов ...
Одним из решений является использование этого трюка с множественным включением.
// myenumeration.td
MY_ENUMERATION_META_FUNCTION(Item1)
MY_ENUMERATION_META_FUNCTION(Item2)
MY_ENUMERATION_META_FUNCTION(Item3)
MY_ENUMERATION_META_FUNCTION(Item4)
MY_ENUMERATION_META_FUNCTION(Item5)
Тогда люди просто используют это так:
#define MY_ENUMERATION_META_FUNCTION(Item_) \
case Item_: return #Item_;
char const* print(MyEnum i)
{
switch(i) {
#include "myenumeration.td"
}
__unreachable__("print");
return 0; // to shut up gcc
}
#undef MY_ENUMERATION_META_FUNCTION
Независимо от того, хорошо это или хакерски, решать вам, но, очевидно, полезно не обходить все утилиты каждый раз, когда в перечисление добавляется новое значение.