Когда вы пишете:
double myfunc(x){
return x;
}
, вы объявляете функцию в устаревшем стиле первого издания книги Kernighan & Ritchies "C Язык программирования".
Это Стиль, все еще живой, позволяет объявлять функцию, просто называя ее параметры (которые всегда локальны для функции , поэтому глобальная x
является переменной, отличной от параметра x
для функции) и, поскольку вы не указываете его тип, по умолчанию он равен int
. Таким образом, вы фактически объявляете (в ANSI- C) следующую функцию:
double myfunc(int x){
return x;
}
и, как видите, она принимает целочисленный параметр.
Параметры для функции: ВСЕГДА локально для функции, вы не можете сделать их глобальными переменными.
Примечание:
Если вы хотите определить функцию в старом стиле C, правильное определение будет быть:
double myfunc(x)
double x;
{
return x;
}
в ANSI- C is:
double myfunc(double x)
{
return x;
}
Я попытался скомпилировать следующую программу на моем компьютере:
#include <math.h>
#include <stdio.h>
double myFunc(x)
{
return x;
}
int main()
{
printf("%g\n", myFunc(M_PI));
}
с помощью следующие ПРЕДУПРЕЖДЕНИЕ :
$ make pru
cc -O2 -pipe pru33336.c -o pru33336
pru33336.c:11:24: warning: implicit conversion from 'double' to 'int' changes value from 3.141592653589793 to 3 [-Wliteral-conversion]
printf("%g\n", myFunc(M_PI));
~~~~~~ ^~~~
/usr/include/math.h:149:15: note: expanded from macro 'M_PI'
#define M_PI 3.14159265358979323846 /* pi */
^~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
$ _
Таким образом, вы можете видеть, что выполняется автоматическое преобразование c для преобразования двойного значения, переданного функции, в int
, чтобы соответствовать тип параметра. Если вы запустите программу, вы получите только
$ pru
3
$ _