Я хотел бы сделать эквивалент следующего:
#define print_max(TYPE) \
# ifdef TYPE##_MAX \
printf("%lld\n", TYPE##_MAX); \
# endif
print_max(INT);
Теперь директива #ifdef
или любой вложенной препроцессора
не допускается, насколько я могу видеть в макросе функции.
Любые идеи?
Обновление: похоже, это невозможно. Даже взлом для проверки во время выполнения кажется недостижимым. Поэтому я думаю, что я пойду с чем-то вроде:
#ifndef BLAH_MAX
# define BLAH_MAX 0
#endif
# etc... for each type I'm interested in
#define print_max(TYPE) \
if (TYPE##_MAX) \
printf("%lld\n", TYPE##_MAX);
print_max(INT);
print_max(BLAH);