Полагаю, очевидным ответом на этот вопрос является вопрос «почему бы не исправить код, чтобы использовать правильный тип указателя»?
EDIT
Хорошо, я могу понять, что вы не хотите усложнять код без необходимости, но я не думаю, что это слишком сложное или даже ненужное осложнение.
Давайте посмотрим на поле open в структуре Hardware_MouseDriver , которое должно быть указателем на функцию, которая принимает указатель на void в качестве первого аргумента.
Для инициализации этого поля вы используете указатель на функцию Hardware_MouseDrivers_GPM_Open , а в другом месте указатель на функцию Hardware_MouseDrivers_DevInput_Open . Ни один из них не принимает указатель на void в качестве первого аргумента, и это, конечно, то, о чем предупреждает компилятор.
Теперь, , если указатель void имеет тот же размер, что и эти указатели, и нет других удивительных различий между тем, как они хранятся и обрабатываются, при вызовах этих функций через open указатель будет работать как положено. Вполне вероятно, что так и будет, и я предполагаю, что с этим типом низкоуровневого кода маловероятно, что кто-то перенесет его на TOPS-20 или что-то еще. Но нет никаких гарантий, что это
будет работать, и это выглядит (для меня) странно. (И компилятору, очевидно!)
Поэтому я предлагаю изменить код следующим образом:
static int Hardware_MouseDrivers_GPM_Open(Hardware_MouseDrivers_GPM *this, char *path) {
printf("GPM: Opening %s...\n", path);
this->path = path;
}
чуть более сложным:
static int Hardware_MouseDrivers_GPM_Open(void *arg1, char *path) {
Hardware_MouseDrivers_GPM *this = arg1;
printf("GPM: Opening %s...\n", path);
this->path = path;
}
Я думаю, что это изменение будет проще и менее сложным, чем (1) отключение предупреждений, (2) его документирование, чтобы читатели могли понять, почему это предупреждение не считается здесь важным, (3) документирование его еще поэтому ваши читатели действительно верят, что вы знаете, что делаете, и (4) решаете проблемы, которые могут возникнуть, если кто-то на самом деле сделает портирует ваш код на TOPS-20.