Как наилучшим образом исправить оба предупреждения (объявление c-функции старого стиля не является прототипом) - PullRequest
0 голосов
/ 14 ноября 2011

Я исправлял некоторые функции в куске чужого кода, который включал ряд функций, которые не принимали аргументов. Они были объявлены как

return_type_t func();

вместо return_type_t func (void);

Затем я обнаружил, что куча из них была помещена в массив структур с указателями на функции. Когда я исправил указатель на функцию void, я получил еще одно предупреждение, поскольку 1 из функции взяла символ * вместо void ptr.

Каково лучшее решение для такого рода вещей без большой переписки (так как код сложный, я в основном чистил его по краям и хотел избежать изменения способа его прохождения)

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

В определении struct должен быть указан правильный тип функции в члене, если вы хотите безопасность типов, пути назад нет

0 голосов
/ 14 ноября 2011

Вы можете переписать весь ваш прототип, чтобы взять символ *, а затем привести к (void) parameter, если параметр не используется

0 голосов
/ 14 ноября 2011

В C объявление старого стиля return_type_t func() не означает, что func не принимает аргументов, это означает, что число и типы его аргументов (если они есть) не указаны. Вы не можете просто предположить, что вы можете добавить void в скобках.

Не видя больше вашего кода, я советую исследовать каждую функцию отдельно и выяснить правильное количество и типы параметров для каждой, а затем заполнить прототип соответствующим образом.

...