Разница между этими двумя случаями объясняется так: если вы передаете параметр функции, которая не принимает ни одного, вы просто занимаете немного памяти в стеке.Если вы не передадите какой-либо параметр в функцию, которая принимает несколько, последняя будет читать случайные данные из стека.
Обновление : изменено на вики сообщества:Добавьте эти исправления из Паскаля Куока:
Приведения указателя функции в обоих направлениях являются законными, информативными предупреждениями от компилятора.Вызов функции с неправильным прототипом является незаконным в обоих случаях.Некоторые ABI требуют, чтобы функция очищала стек, и в этом случае передача параметров функциям, которые не принимают ни одного, повреждает стек так же, как и не передачу параметров функциям, которые их ожидают.
C99 6.3.2.3 пар.8:
Указатель на функцию одного типа может быть преобразован в указатель на функцию другого типа и обратно;результат должен сравниваться равным исходному указателю.Если преобразованный указатель используется для вызова функции, тип которой не совместим с указанным типом, поведение не определено