太自信的郁闷
有篇论文引用了形如以下的程序,其中关于函数原型的:
#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




