CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

太自信的郁闷

楼主AcerHeart(不辞长做岭南人)2005-06-07 00:53:56 在 C/C++ / C语言 提问

有篇论文引用了形如以下的程序,其中关于函数原型的:  
  #include   <string.h>  
  #include   <stdio.h>  
  main()  
  {  
        int   max(int   x,int   y);//很少有这样写函数声明的,我也就认为不能这样做了  
        printf("%d",max(10,20));  
  }  
   
  int   max(int   x,int   y)  
  {  
  return   x>y?x:y;  
  }  
   
  于是我便指出了,遭到同事的抵抗,但我坚称那样是不能运行的,结果我回家运行却是可以的!  
  问题点数:100、回复次数:56Top

1 楼steedhorse(晨星)回复于 2005-06-07 00:55:39 得分 2

C语言中,函数不能嵌套定义(这一点跟Pascal不一样),但仍然可以嵌套声明。Top

2 楼steedhorse(晨星)回复于 2005-06-07 00:59:12 得分 2

自信是好事,呵呵。  
  楼主也不用为这一次事情而不开心。Top

3 楼foochow(无聊,灌水......)回复于 2005-06-07 01:06:11 得分 2

HOHO~~~就是咯,不必在意Top

4 楼Student02370236(★★★★★★)回复于 2005-06-07 01:06:32 得分 2

此程序并没有违背先声明再使用的规则,所以这个并没有错Top

5 楼Student02370236(★★★★★★)回复于 2005-06-07 01:13:50 得分 2

在DEVC++中,甚至可以不用声明函数,只要有函数的定义就可以直接使用  
  不过作为一种好的习惯还是先声明再使用吧Top

6 楼liujingfu123(Oh_My_GoD)回复于 2005-06-07 08:42:41 得分 2

用不着郁闷了……Top

7 楼mccxj(老鼠不逛街)回复于 2005-06-07 08:44:59 得分 2

呵呵。。有什么好郁闷的。。  
  至少现在知道了原来可以这样的。。呵呵。Top

8 楼qfeng_zhao(鱼儿鱼儿满天飞)回复于 2005-06-07 08:50:40 得分 2

自信是好事,呵呵。  
  楼主也不用为这一次事情而不开心。  
  Top

9 楼darkstar21cn(≮天残≯无畏)(死亡进行时)回复于 2005-06-07 09:07:09 得分 2

看这种写法,不习惯,从来没用过。Top

10 楼shadow22(堂主)回复于 2005-06-07 09:09:59 得分 2

我也没有这样写过,一般除了static函数,都是用extern来声名的。Top

11 楼AcerHeart(不辞长做岭南人)回复于 2005-06-07 09:12:23 得分 0

看了大家的劝解,郁闷稍减  
  谢过了Top

12 楼flcz0320(风流才子)回复于 2005-06-07 10:13:09 得分 2

从不知到知   便是学习的过程Top

13 楼cutestar(猪哥靓)回复于 2005-06-07 10:37:28 得分 2

对于C/C++程序员来说,养成良好的习惯和实事求是的态度是很重要的。Top

14 楼hanxingwuqing(无效参数)回复于 2005-06-07 10:39:21 得分 2

不过这种编程习惯很不好哦  
   
  虽然运行可以,但是会让程序的可读性变差啊  
   
  所以楼主没必要郁闷……Top

15 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-06-07 10:39:54 得分 2

可以这样写的.Top

16 楼clear117(小风)回复于 2005-06-07 11:13:01 得分 2

能肯定自己的答案我觉得更重要Top

17 楼c_nestor()回复于 2005-06-07 11:29:24 得分 2

有自信就好Top

18 楼jixingzhong(瞌睡虫·星辰)回复于 2005-06-07 11:58:22 得分 2

自信很好!!  
   
  但是很抱歉,我要说的是那确实是对的!!  
  和局部变量一样,只是函数的作用域仅限制在MAIN函数内部就可以了!!  
   
  这是ANSI C标准中有的!!  
   
  Top

19 楼lxwei(累了想睡觉..)回复于 2005-06-07 12:14:42 得分 2

有自信就好  
  Top

20 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-06-07 12:40:56 得分 2

好习惯很重要的Top

21 楼hofer_song(逯爻(虫))回复于 2005-06-07 12:46:04 得分 2

//你的同事也很有自信吖,不过他的这种声明函数的习惯还真有点怪,楼主小心了,说不定,在他的程  
  //序里还能找到更离经判道的内容呃;Top

22 楼AcerHeart(不辞长做岭南人)回复于 2005-06-07 13:09:38 得分 0

to   jixingzhong(瞌睡虫):  
  试了一下,确定如你所说,真是C海无涯啊  
   
  #include   <string.h>  
  #include   <stdio.h>  
  #include   <string.h>  
  #include   <stdio.h>  
  void   fn();  
  main()  
  {  
        int   max(int   x,int   y);//很少有这样写函数声明的,我也就认为不能这样做了  
        printf("%d",max(10,20));  
        fn();  
  }  
  void   fn()  
  {  
        printf("%d",max(10,20));  
  }  
   
  int   max(int   x,int   y)  
  {  
        return   x>y?x:y;  
  }  
   
  Top

23 楼pomelowu(羽战士)回复于 2005-06-07 13:14:00 得分 2

虽然输了口舌之争,但是学到东西了,有什么好郁闷的?Top

24 楼AcerHeart(不辞长做岭南人)回复于 2005-06-07 13:19:27 得分 0

已经不郁闷了,还有新疑问:  
  声明1与声明2所对应的定义只有一处  
  是不是有问题?  
  #include   <string.h>  
  #include   <stdio.h>  
  void   fn();  
  int   max(int   x,int   y);   //声明1    
  main()  
  {  
        int   max(int   x,int   y);//声明2    
        printf("%d",max(10,20));//调用1    
        fn();  
  }  
  void   fn()  
  {  
        printf("%d",max(10,20));//调用2    
  }  
   
  int   max(int   x,int   y)//只有一处定义    
  {  
  return   x>y?x:y;  
  }  
   
  Top

25 楼AcerHeart(不辞长做岭南人)回复于 2005-06-07 13:35:19 得分 0

再看看这个程序:  
  #include   <string.h>  
  #include   <stdio.h>  
  void   fn();  
  int   max(int   x,int   y);   //声明1    
  main()  
  {  
        int   max(int   x,short   y);//声明2    
        int   x=20;  
        printf("%d\n",max(10,x));//调用1:按道理应该调用inty版,但实际运行却调用shorty版    
        fn();  
        getchar();  
  }  
  void   fn()  
  {  
        printf("%d\n",max(10,20));//调用2    
  }  
   
  int   max(int   x,int   y)//只有一处定义    
  {  
  printf("in   int   y\n");  
  return   x>y?x:y;  
  }  
   
  int   max(int   x,short   y)//只有一处定义    
  {  
  printf("in   short   y\n");  
  return   x>y?x:y;  
  }  
  Top

26 楼mostideal(三甲)回复于 2005-06-07 13:38:01 得分 2

一般来说,是没问题的。。他只是申明而不是定义。。Top

27 楼hbzj(诚缘)回复于 2005-06-07 14:55:43 得分 2

学习...Top

28 楼hofer_song(逯爻(虫))回复于 2005-06-07 15:31:06 得分 2

//从楼主的声明和调用来看,printf内嵌函数调用的时候,首先在临近的代码块内查找被调函数的声  
  //明;Top

29 楼whatsouta(某疯子)回复于 2005-06-07 15:47:34 得分 2

c的规则就是先声明/定义,后使用。  
  没什么疑问的。Top

30 楼flysky_yzu(天中天(学海无涯))回复于 2005-06-07 16:52:26 得分 2

这样是合理的。  
  当然是可以使用的,虽然,我也没这样用过。Top

31 楼yangyu112654374(Spaceman)回复于 2005-06-07 16:56:19 得分 2

只要确信自己是对的就可以了!  
   
  至于别人说什么就让他们说吧!Top

32 楼copygirl(wa!)回复于 2005-06-07 17:20:18 得分 2

写在main里的函数声明看起来确实有点怪。Top

33 楼softstarxy(逍遥)回复于 2005-06-07 17:37:15 得分 2

坏习惯。。。。。。。Top

34 楼lijichao(木子)回复于 2005-06-07 19:18:20 得分 2

我觉得楼主同事的做法挺好的,我觉得有利于程序可读性,所以我不认为这是个坏习惯Top

35 楼naturemickey(米老鼠)回复于 2005-06-07 19:19:13 得分 2

顶。Top

36 楼nasi00(莫傲·逍遥)回复于 2005-06-07 19:27:29 得分 2

钻研是好事,无论怎么样你学到东西,不是吗?Top

37 楼Flood1984(峰子)回复于 2005-06-08 01:32:26 得分 2

int   max(int   x,int   y)//只有一处定义    
  {  
  printf("in   int   y\n");  
  return   x>y?x:y;  
  }  
   
  int   max(int   x,short   y)//只有一处定义    
  {  
  printf("in   short   y\n");  
  return   x>y?x:y;  
  }  
  //C不能重载函数,这样写能行么?  
  如果在C++中,那么应该按照重载解析的步骤来,那将使用的是int   max(int   x,int   y);Top

38 楼cppprogramlover(爱相随—)回复于 2005-06-08 03:18:41 得分 2

int   max(int   x,int   y);//很少有这样写函数声明的,我也就认为不能这样做了  
   
   
  我怎么觉得这再好不过呢   ?Top

39 楼alphagm(渴望翅膀)回复于 2005-06-08 07:27:08 得分 2

好象在C++的理念中,总是提倡这种申明的方法的!在函数之外申明是C语言中提倡的!Top

40 楼pomelowu(羽战士)回复于 2005-06-08 09:05:47 得分 2

再看看这个程序:  
  。。。。  
        printf("%d\n",max(10,x));//调用1:按道理应该调用inty版,但实际运行却调用shorty版    
   
  ______________________  
   
  因为函数作用域的原因,x被隐式转换了。要调用int   y版,就要用到域作用符::  
  #include   <string.h>  
  #include   <stdio.h>  
  void   fn();  
  int   max(int   x,int   y);   //声明1    
  int   main()  
  {  
        int   max(int   x,short   y);//声明2    
        int   x=20;  
        printf("%d\n",   ::max(10,x));//调用1:用::符号指明用全局max函数。    
        fn();  
        getchar();  
        return   0;  
  }  
  void   fn()  
  {  
        printf("%d\n",max(10,20));//调用2    
  }  
   
  int   max(int   x,int   y)//只有一处定义    
  {  
  printf("in   int   y\n");  
  return   x>y?x:y;  
  }  
   
  int   max(int   x,short   y)//只有一处定义    
  {  
  printf("in   short   y\n");  
  return   x>y?x:y;  
  }  
   
  Top

41 楼javence(海)回复于 2005-06-08 12:04:26 得分 2

楼主也不要太难过!不过这样写代码还是不太好,即使是可以运行,但可读性/维护性就不太好!  
  因该避免一些生僻情形的写法Top

42 楼JandC(不可知论者)回复于 2005-06-08 13:32:47 得分 2

跟技术无关!记住  
  不要说过头的话!即便你认为自己很正确!  
  你应该说:“我如果我没搞错的话,......”,(类似的语气)  
  这样在自己正确的情况下,别人容易接受你的想法,  
  在自己错误的情况下,人家也不会嘲讽你。Top

43 楼nicknide(封月翔天)回复于 2005-06-08 14:15:14 得分 2

刚上饼子村的时候,也因为太自信而被大家BS了一把,现在学聪明了,使用肯定语气的疑问句,呵呵.....Top

44 楼rocksan(rock1)回复于 2005-06-08 14:15:34 得分 2

按套路来!Top

45 楼hzh_net(_风云_)回复于 2005-06-08 14:18:38 得分 2

自信是好事,呵呵。  
  楼主也不用为这一次事情而不开心。  
  放开点...  
  没什么的Top

46 楼Flood1984(峰子)回复于 2005-06-08 14:47:29 得分 2

是了,  
  如pomelowu(羽战士)所说,全局的max被局部的max覆盖了,  
  因为不在同一域中的同名函数,只能被覆盖而不是重载。Top

47 楼zg351229063(zgcrzg)回复于 2005-06-08 14:51:49 得分 2

楼主不必不高兴,有病的人才这么写呢!  
  这么写有什么用啊,完全不符合易读的要求.  
  C是用来做事情的,不是吓唬人的.Top

48 楼holymoon858()回复于 2005-06-08 15:46:04 得分 2

对于此,楼主应该坚持自信:不应该这样用!  
   
  虽然C标准是允许,但是这样的写法1.不利于理解;2.不利于维护,简而言之就是不符合规范,如果不相信的话就用pc_lint来检查,看这段不满15行的代码会报多少错误。  
   
  这样的写法是必须摒弃的。Top

49 楼Truly()回复于 2005-06-08 17:16:22 得分 2

有自信就好Top

50 楼xnlcx(J2EE.Net)回复于 2005-06-08 18:27:25 得分 2

 
  正常啊  
  没事啊  
   
  接分啊Top

51 楼gxh973121()回复于 2005-06-08 19:04:54 得分 2

跟js语法怎么有点像Top

52 楼yuanyou(元友)回复于 2005-06-08 20:16:05 得分 2

呵呵,自信就好Top

53 楼Lovezz(可爱不是错)回复于 2005-06-08 20:25:35 得分 1

各位大哥     我想问问题啊    
  怎么发帖子的啊         怎么都没人回答的啊     !!!!   我论坛网页左边导航兰显示不了的啊!!Top

54 楼foochow(无聊,灌水......)回复于 2005-06-08 20:39:27 得分 1

自信是一种有点!!!!!!!!!1^_^Top

55 楼manio(马牛)回复于 2005-06-08 22:10:48 得分 1

咦,我都知道那个东东可以那样用的。一般的C语言教材上都有啊。Top

56 楼garfunkle(摇滚下的蛋)回复于 2005-06-08 23:20:20 得分 1

其实   此事情   和一些   c   语言的边角问题   不应该作为c语言的研究范畴  
   
  很多   边角问题   都和   编译器的实现有很大的关系    
   
  如果   由你认为正确的习惯写法   使用就是了    
   
  我觉得阿~~~~Top

相关问题

  • 给一个不是太自信的小虾指点指点!
  • 愛情不會把自信當贈品
  • 公告:提问题放分是不自信的表现,为了证明你是个自信的人,follow me ~~~~~~~`
  • 为什么程序员都那么自信?
  • 自信有三寸不烂之舌者可得分。
  • 我的MM对工作不自信,怎么办?
  • 明天参加海南移动面试--比较自信(放分)
  • 明天参加海南移动面试--比较自信(放分)
  • 自信能给出不错的意见就给分!不够在加
  • 怎么样才能增强自信?苦恼,求解,肯定给分!

关键词

  • c++
  • 函数
  • 语言
  • 代码
  • 调用
  • 定义
  • max
  • 自信
  • 声明
  • 郁闷

得分解答快速导航

  • 帖主:AcerHeart
  • steedhorse
  • steedhorse
  • foochow
  • Student02370236
  • Student02370236
  • liujingfu123
  • mccxj
  • qfeng_zhao
  • darkstar21cn
  • shadow22
  • flcz0320
  • cutestar
  • hanxingwuqing
  • zhousqy
  • clear117
  • c_nestor
  • jixingzhong
  • lxwei
  • guyaguya
  • hofer_song
  • pomelowu
  • mostideal
  • hbzj
  • hofer_song
  • whatsouta
  • flysky_yzu
  • yangyu112654374
  • copygirl
  • softstarxy
  • lijichao
  • naturemickey
  • nasi00
  • Flood1984
  • cppprogramlover
  • alphagm
  • pomelowu
  • javence
  • JandC
  • nicknide
  • rocksan
  • hzh_net
  • Flood1984
  • zg351229063
  • holymoon858
  • Truly
  • xnlcx
  • gxh973121
  • yuanyou
  • Lovezz
  • foochow
  • manio
  • garfunkle

相关链接

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

广告也精彩

反馈

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