CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

为什么要对要调用的函数进行声明?

楼主cherryleo(自由自在)2006-06-04 15:28:09 在 C/C++ / C语言 提问

老谭《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

相关问题

关键词

得分解答快速导航

  • 帖主:cherryleo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo