Я не понимаю пример функции, которую вы даете очень хорошо, но использовать макросы для этой задачи относительно легко.Просто вы не дали бы строки макросу в качестве аргументов, но токены :
#define DECLARE_MY_COPY_FUNCTION(TYPE, SUFFIX) \
int copy_function_ ## SUFFIX(unsigned count, TYPE* arg)
#define DEFINE_MY_COPY_FUNCTION(TYPE, SUFFIX) \
int copy_function_ ## SUFFIX(unsigned count, TYPE* arg) { \
/* do something with TYPE */ \
return whatever; \
}
Затем вы можете использовать это для объявления функций в файле заголовка
DECLARE_MY_COPY_FUNCTION(unsigned, toto);
DECLARE_MY_COPY_FUNCTION(double, hui);
и определите их в файле .c:
DEFINE_MY_COPY_FUNCTION(unsigned, toto);
DEFINE_MY_COPY_FUNCTION(double, hui);
В этой версии, как указано здесь, вы можете получить предупреждения о лишних `; '.Но вы можете избавиться от них, добавив фиктивные объявления в макросах, как это
#define DEFINE_MY_COPY_FUNCTION(TYPE, SUFFIX) \
int copy_function_ ## SUFFIX(unsigned count, TYPE* arg) { \
/* do something with TYPE */ \
return whatever; \
} \
enum { dummy_enum_for_copy_function_ ## SUFFIX }