Я думаю, вы, возможно, неправильно поняли назначение оператора вставки символа ##
. Вам не нужно ставить ##
перед каждым использованием аргумента макроса, только когда вы хотите вставить его вместе с другим текстом для создания одного символа в выводе. Так что, вероятно, оно вам понадобится, но не везде.
Так что это ближе:
# define MACRO_TEST(classname, methodname, args, argsMethod) \
void Java_somepackage_##classname##_fixMethod(args) {\
Toolbox.methodname(argsMethod);\
}
MACRO_TEST(MyClassA, methodForClassA, args1, args2)
Однако , это все еще не работает. Ваш args параметр, я думаю, содержит переменное количество параметров. В более новых версиях C есть что-то, что называется «параметры макропеременного макроса» , но я никогда не использовал их. Или вы можете заключить параметры в круглые скобки в вызове макроса, например:
# define MACRO_TEST(classname, methodname, args, argsMethod) \
void Java_somepackage_##classname##_fixMethod args {\
Toolbox.methodname argsMethod;\
}
MACRO_TEST(MyClassA, methodForClassA, (int arg1, int arg2), (arg1, arg2))