Перед тем, как называть его, вам нужно предоставить объявление для func
.
int func(int a,int b);
int main() {
}
int func(int a,int b) {
// implementation
}
Ваш код, предположительно, скомпилирован с предупреждением что-то вроде warning: implicit declaration of function 'func'
. Если вы исправили это предупреждение, вы также исправили бы ошибку.
Было бы неплохо, если бы компилятор предупредил вас о как можно большем числе потенциальных проблем. Вы также можете быть в безопасности от возможности пропуска предупреждений, рассматривая их как ошибки. Вы можете сделать это, добавив -Wall -Werror
к вашей команде сборки для gcc или /W4 /Wx
для MSVC.
Обратите внимание, что правильное значение возвращается, если вы передаете int
s в func
. Возможно, это может быть связано с тем, что вызывающий код не знает, что ему нужно передать аргументы в int
и передать float
. func
затем либо считывает регистры / местоположения стека, которые floats
не были скопированы или получены представления бит из аргументов float
и обрабатывают их как int
. Любой из них приведет к получению неверных значений a
, b
. Вы можете проверить это самостоятельно, добавив printf
внутри func
, чтобы отметить значения своих аргументов.