当你写作时:
double myfunc(x){
return x;
}
您正在以 Kernighan & Ritchies 第一版“The C Programming Language”一书的传统风格声明一个函数。
这种风格仍然存在,允许您声明一个函数,只需命名它的参数(它们始终是函数的局部,因此全局 x 是与参数 @987654323 不同的变量@ 到函数),并且由于您没有指定其类型,因此它默认为 int。因此,您实际上是在(在 ANSI-C 中)声明以下函数:
double myfunc(int x){
return x;
}
而且,如您所见,它需要一个整数参数。
函数的参数总是是函数的局部变量,您不能将它们设为全局变量。
注意:
如果你想用旧式 C 定义函数,正确的定义应该是:
double myfunc(x)
double x;
{
return x;
}
在 ANSI-C 中是:
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.
$ _
因此您可以看到正在进行自动转换,将传递给函数的双精度转换为int,以符合参数类型。如果你运行程序,你会得到只是
$ pru
3
$ _