Файл, который я использую в моем проекте, имеет много деклараций в этом стиле:
static VALUE do_checksum(int, VALUE*, uLong (*)(uLong, const Bytef*, uInt));
...
static VALUE
do_checksum(argc, argv, func)
int argc;
VALUE *argv;
uLong (*func)(uLong, const Bytef*, uInt);
{
...
}
Хотя я никогда сам не писал код таким образом, я уверен, что это правильно. Однако мой компилятор возвращает
error: 'VALUE do_checksum' redeclared as different kind of symbol
error: 'argc' was not declared in this scope
Что здесь не так?
Windows 7
Код :: Блоки с MinGW
У вас есть некоторые объявления списка параметров параметра С-стиля.
Здесь примерное исправление:
static VALUE do_checksum(
int argc,
VALUE *argv,
uLong (*func)(uLong, const Bytef*, uInt)
)
{
...
}
Еще лучше исправить было бы создание псевдонима типа для func
например:
using func_ptr_type = uLong (*)(uLong, const Bytef*, uInt);