Проблема, приводящая к «ошибке конфликтующих типов», заключается в том, что в области действия не существует объявления функции division()
в точке, где main()
пытается ее вызвать. Такой вызов функции является несоответствующим начиная с C99, но многие компиляторы предоставляют неявное объявление для использования в таком вызове функции, потому что это было поведение изначального C и поддерживается через C90.
HOWEVER, неявное объявление, используемое в этом случае, будет эквивалентно
int division(int i, int n, double h);
, что не соответствует и не совместимо с фактической сигнатурой функции. Когда компилятор позже обнаруживает это, он выдает диагностику c, чтобы предупредить вас об этом. Возможно, он отклоняет код по этой причине - это не ясно из вопроса.
Чтобы разрешить ситуацию, вы должны объявить функцию перед ее (первым) использованием. Один из способов сделать это - переместить все определение division
до main()
, но вы также можете просто поместить предварительное объявление функции перед main()
. Это выглядело бы аналогично приведенному выше (неправильному) объявлению, но оно правильно отражало бы истинный тип возвращаемого значения функции и типы параметров:
float division(int i, int n, float h);