为什么要对要调用的函数进行声明?
老谭《C程序设计》(第三版)第一章和第八章都举到了求最大值的例子:
#include<stdio.h>
void main( )
{ int max(int x, int y);/*对被调用函数max的声明*/
int a, b, c ;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf(" max is %d\n",c);
}
int max(int x, int y)
{ int z;
z=(x>y)?x:y;
return(z); }
而在第二版书中,main函数中却没有int max(int x, int y)这句话,我在机器上试了下,没有也是可以的,但按书中的意思这个声明似乎是一定要有的,请问为什么?有没有声明这句话对程序来说有什么影响呢?
问题点数:10、回复次数:12Top
1 楼ywhbn(天涯)回复于 2006-06-04 17:04:09 得分 0
我的理解:
声明函数一方面是为了增加可读性,打开文件就能看到这个文件中定义了哪些函数,不用到处去找。另一方面是为了给其它模块调用,比方说a.c中有个函数要调用b.c中的函数funca,你就可以把funca的声明放如b.h中,然后在a.c的开始部分加入#include "b.h",方便简洁。Top
2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 17:44:08 得分 0
int max(int x, int y); // 就跟要用a之前要int a; 一样...
#include<stdio.h>
void main( )
{
// int max(int x, int y);/*对被调用函数max的声明*/ //这样不能通过。。。
int a, b, c ;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf(" max is %d\n",c);
}
int max(int x, int y)
{ int z;
z=(x>y)?x:y;
return(z);
}
-----------------------------------------------
#include<stdio.h>
int max(int x, int y);/*对被调用函数max的声明*/
void main( )
{
int a, b, c ;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf(" max is %d\n",c);
}
int max(int x, int y)
{ int z;
z=(x>y)?x:y;
return(z); }
//能通过!!Top
3 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 17:51:00 得分 0
第一个不能通过好比:
使用a在定义a 之前
a = 0; //error ;
int a;Top
4 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 17:54:21 得分 0
把这个原因扯的更大一点就是:
在程序编译的过程中,
当编译到c=max(a,b); //(调用自定义函数)
时候,在之前的程序段中没有关于max(***)的声明,程序不会到c=max(a,b); 之后去匹配自定义函数Top
5 楼cherryleo(自由自在)回复于 2006-06-04 18:13:43 得分 0
现在的问题是我没有在main中写“int max(int x, int y);”这句话,程序也通过了,我用的是tc3.0Top
6 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 18:19:43 得分 0
哈哈,有是一个编译器的问题!!
Top
7 楼cherryleo(自由自在)回复于 2006-06-04 18:54:20 得分 0
跟编译器有关?Top
8 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-05 10:16:57 得分 0
跟编译器有关
老一点的有的可以通过的Top
9 楼xpdavis(咕嘟-不想孤独)回复于 2006-06-05 10:38:11 得分 0
在纯C中,不声明的函数缺省为返回INT的,所以程序可以正常运行。在C++里面不行Top
10 楼hgw520(飞天鲲鹏)回复于 2006-06-05 11:32:10 得分 0
学学C基础吧,有几种情况是不需要声明的,其中之一就是返回值是int型的,函数声明的目的就是在调用之前先编译并分配存储空间!Top
11 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-06-05 12:28:53 得分 0
函数声明的目的是编译时的类型检查,防止你不小心用错了参数。但早期的编译器是靠程序员自己保证参数的正确的,容易出错。Top
12 楼tailzhou(尾巴)回复于 2006-06-05 13:49:34 得分 0
A_B_C_ABC(黄瓜) ( ) 信誉:100 2006-06-05 12:28:00 得分: 0
函数声明的目的是编译时的类型检查,防止你不小心用错了参数。
xpdavis(咕嘟) ( ) 信誉:105 2006-06-05 10:38:00 得分: 0
在纯C中,不声明的函数缺省为返回INT的,所以程序可以正常运行。在C++里面不行
综合一下:
没显式申明的函数实际上是在第一次使用的时候隐式声明的,返回值为INT,但编译程序不会做参数的类型检查;就跟声明成 max();int max();一样
Top




