Предварительная обработка 'c' - это процесс замены макросов текстом из их определений.некоторые операции, такие как ##, позволяют добавлять свой аргумент в виде текста в определения.Итак, все сделано еще до начала компиляции.
В результате в вашем случае FUN(fun,i)
будет подставлено в виде текста и формы funi
.Единственный ограниченный способ создания имен функций, которые вы хотите, - это использовать реальные текстовые значения или другие макросы.Вот 2 примера, которые будут работать с предварительной обработкой:
FUN(fun, 0)(1);
или
#define I 0
FUN(fun, I)(1);
В последнем случае I
- это сам макрос, поэтому он также работает.(всегда полезно называть имя макроса заглавными буквами).