| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1139 人关注过本帖
标题:为什么不用声明呢?
只看楼主 加入收藏
weixun
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-7-13
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:13 
为什么不用声明呢?
#include <iostream.h>
#include<math.h>
double max(double x,double y)
{
    if(x>y)
        return y;
    else
        return x;
}
void main()
{
   
    double a,b,c;
    cout<<"input tow numbers"<<endl;
    cin>>a>>b;
    c=max(a,b);
    cout<<"the squar root of c is"<<""<<sqrt(c)<<endl;
}


//我的问题是为什么不在main下面大括号的下一行加上double max(double x,double y);来表示声明呢?
搜索更多相关主题的帖子: 声明 
2009-09-25 20:17
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:2 
如果你在使用一个函数之前,在同一个文件中定义(即实现)了这个函数函数,那么就不需要声明就可使用了,当然你声明也不会错。



如果你写成下面这样,那么在使用之前就必须声明了。

#include <iostream.h>
#include<math.h>

void main()
{
   
    double a,b,c;
    cout<<"input tow numbers"<<endl;
    cin>>a>>b;
    c=max(a,b);
    cout<<"the squar root of c is"<<""<<sqrt(c)<<endl;
}

double max(double x,double y)
{
    if(x>y)
        return y;
    else
        return x;
}


[ 本帖最后由 gz81 于 2009-9-25 20:31 编辑 ]

我的空间:http://student./space.php?uid=116706
2009-09-25 20:25
yxb0001
Rank: 2
等 级:论坛游民
帖 子:50
专家分:35
注 册:2009-9-9
收藏
得分:1 
这是函数与主程序的区别。

main()是主程序,在此只是调用函数,目的是减少同类情况下的重复工作。

函数是辅助性的,只有在main之外定义才能多次使用。如果在此之内定义,则只能使用一次。
2009-09-26 02:44
weixun
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-7-13
收藏
得分:0 
高手朋友,我想问一下程序的执行顺序是怎样的?是不是先执行上面的函数然后才接着执行main()程序啊?
2009-09-27 09:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
不是,是从main开始执行的。

其它函数只有当调用到时,才会执行。
不过,当然编译的时候不一定会从main开始了。
2009-09-27 10:03
weixun
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-7-13
收藏
得分:0 
那么函数放在main()和放在main()是没有区别的吗?是不是都是在main()中用到该函数时才执行的?如上例所示为什么函数函数放前和放后不一样呢?放前了不需要声明,但是放后了得要声明。
非常期待朋友们的回答!!!
谢谢
2009-09-27 14:36
pywepe
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:296
专家分:483
注 册:2009-4-5
收藏
得分:1 
程序代码:
#include <iostream.h>
#include<math.h>

double max(double x,double y);

void main()
{
   
    double a,b,c;
    cout<<"input tow numbers"<<endl;
    cin>>a>>b;
    c=max(a,b);
    cout<<"the squar root of c is"<<""<<sqrt(c)<<endl;
}

double max(double x,double y)
{
    if(x>y)
        return y;
    else
        return x;
}

java群
62635216
欢迎加入
2009-09-27 17:46
forclwy
Rank: 4
等 级:业余侠客
帖 子:167
专家分:255
注 册:2008-10-21
收藏
得分:1 
main()函数是整个程序的入口,从它开始执行。
楼上各位都说的很好啊。
2009-09-27 21:14
情叶
Rank: 1
来 自:湖北孝感
等 级:新手上路
帖 子:19
专家分:4
注 册:2009-9-4
收藏
得分:1 
C语言中有段话:如果被调用函数出现在主函数之前,可以不必加以声明。因为编译系统已知道了已定义函数的有关情况,会根据函数首部提供的信息对函数的调用做正确的检查。     就像上楼手的编译不是从主函数开始

永不言弃,人定胜天
2009-09-27 22:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
回复 6楼 weixun
你写的源码是给编译器看的,只要它看不懂就会报错(一般就是指语法错误)。
比如调用函数时,编译要核查参数的个数和类型以及返回等等。如果编译器不知道函数的相关内容,就无法做出判断。
一般来说编译器,都是线性扫描源码的,就是顺序读过来。如果它读到这个地方,声明还没出现,那么由于后面的东西它还没有读,所以也不知道。
还有些东西可能是在别的文件中定义的,这个文件中本来就没有。那么,编译器显然也不知道到哪里去找,因此也需要声明来指出足够的细节。

这些跟程序的执行没有关系。编译器能看懂了,它才会按照指示生成可执行文件。可执行文件中包含了一系列指令,CPU可以直接解读,那时就没编译器什么事了。
换句话说,编译器就是把C代码翻译成CPU能看懂的指令。如果你说的话有语法错误,那么编译器就会拒绝翻译,否则它就会把语句翻译好。之后就没什么事了,CPU自己怎么去读,不是编译器的工作。
2009-09-27 23:33
快速回复:为什么不用声明呢?
数据加载中...
 
   



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

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