| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2852 人关注过本帖
标题:由朋友提问,想到的一个自定义函数的问题(未解决)
只看楼主 加入收藏
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
结帖率:100%
收藏
 问题点数:0 回复次数:48 
由朋友提问,想到的一个自定义函数的问题(未解决)

昨天,cjdaily问了我一个自定义函数的问题

让我连想到下边三个程序,同时是关于自定义函数的区别

程序1

#include<stdio.h>
int max(int x,int y); //注意分号!
int main()
{
int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d",c);
getch();
return 0;
}
int max(int x,int y)
{
int z;
z=x>y?x:y;
return z;
}

程序2

#include<stdio.h>
int max(int x,int y) //没有分号!
{
int z;
z=x>y?x:y;
return z;
}
int main()
{
int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d",c);
getch();
return 0;
}

程序3

#include<stdio.h>
int main()
{
int a,b,c;
int max(int x,int y);
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d",c);
getch();
return 0;
}
int max(int x,int y)
{
int z;
z=x>y?x:y;
return z;
}

这三个程序都能通过gcc编译(最标准的C\C++编译器,别的编译器我少用,所以不好说)

而且它们的结果都是一样的

我在这里想请教各位这样一个问题:

这三个程序除了在写法上的微小差别以外,还有什么区别?!(也就是这三种写法有什么区别)

[此贴子已经被作者于2007-4-10 9:27:50编辑过]

搜索更多相关主题的帖子: 定义函数 int FONT max quot 
2007-04-10 09:25
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
这种问题你也问的出来!!还好意思在QQ里让我给你解释
有分号的是函数声明,你把函数声明里的x和y去掉,也是可以的

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2007-04-10 09:56
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用冰镇柠檬汁儿在2007-4-10 9:56:55的发言:
这种问题你也问的出来!!还好意思在QQ里让我给你解释
有分号的是函数声明,你把函数声明里的x和y去掉,也是可以的

我是想问的是,这三种写法在程序运行上有什么区别

对结果上有什么影响,别的我不管


自我放逐。。。
2007-04-10 10:01
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
同意2楼说法
2007-04-10 10:10
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

真是服了楼主


可惜不是你,陪我到最后
2007-04-10 10:13
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用cdmalcl在2007-4-10 10:10:56的发言:
同意2楼说法

滚!

你不要跟我翻字典跟我说 声明 和 定义 的区别

BS你

我要的是程序运行过程的区别,不是咬文嚼字的区别!


自我放逐。。。
2007-04-10 10:14
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
呵呵
这个东西用不着翻就知道
2007-04-10 10:16
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
声明:是告诉程序有这么一个函数,在程序的某个地方你会定义,在C语言里这个很重要,因为你要想使用一个函数的时候,在这个之前,必须有定义或者声明,但是到了C++里函数是可以在随意的地方定义,这样的声明就没有实际的意义了。
在C++里声明的一般都是方法,在一个类里声明一些方法,然后在另一个文件里可以完成这些方法的定义。
至于定义我想我就不用解释了吧

[此贴子已经被作者于2007-4-10 10:45:41编辑过]


本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2007-04-10 10:43
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
注意两点:

声明函数时,是一个语句,后面要加分号,而定义函数时,不是语句,所以不能加分号,就和宏定义一样(宏定义不是语句)

在调用函数前的任何地方进行了声明或定义(当然不能嵌套定义)后,都没有问题,否则会出现编译错误

另外其实还是有区别的:

函数进行声明时,其实就是一个定义变量的过程,函数名就是一个变量,如果声明在函数外,就相当于定义了一个全局变量,如果声明再某个过程中(包括复合语句),就相当于定义一个局部变量,其作用范围我就不说了.

猴子,你是不是去泡妞啊

雁无留踪之意,水无取影之心
2007-04-10 10:56
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
以下是引用千里冰封在2007-4-10 10:13:24的发言:

真是服了楼主

老千都跑到这来了,百年难得一见,欢迎欢迎

我可是冒着删帖的危险来欢迎你的,以后就不要走了


雁无留踪之意,水无取影之心
2007-04-10 10:58
快速回复:由朋友提问,想到的一个自定义函数的问题(未解决)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031155 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved