Особенности передачи float в функцию Си, которая находится в другом модуле
Есть две функции на C: main() и f1():
#include <stdio.h>
int main(int argc, char** argv) {
float count = 11.07;
double num = 7.25;
int n = 11;
printf("\n(main:) %3.2f : %3.2f : %3d\n", count, num, n);
f1(count, num, n);
return 0;
}
#include <stdio.h>
void f1(float count, double res, int n) {
printf("(f1): %3.2f : %3.2f : %3d\n\n", count, res, n);
}
Вот результат работы функции main():
(main:) 11.07 : 7.25 : 11 (f1): 0.00 : 7.25 : 11
Почему некорректно передается первый параметр float? Особенности компилятора gcc?
Выходной файл был собран так: $ gcc -c main.c f1. $ gcc main.o f1.o -o ./111 $ ./111 (результат выше)
Мне кажется, происходит неявное преобразование float в double. Дело в том, что не могу изменить сигнатуру файла f1() - он внешний. Помогите, плз, советом.
Заранее спасибо!!
Ответы (1 шт):
Поскольку у вас в первом файле нет объявления функции f1, компилятор не знает, как именно ее вызывать и передавать в нее аргументы. В результате функция вызывается не так, как должна.
Эксперимент с компилятором VC++ показал то же, что происходит у вас. Но стоило перед int main... добавить строчку
void f1(float count, double res, int n);
как все стало совершенно верно работать.
Кстати, компилятор выдал предупреждение о необъявленной функции:
warning C4013: f1: нет определения; предполагается "extern" с возвратом типа "int"