注册 登录
编程论坛 C++教室

为什么不用声明呢?

weixun 发布于 2009-09-25 20:17, 1139 次点击
#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);来表示声明呢?
13 回复
#2
gz812009-09-25 20:25
如果你在使用一个函数之前,在同一个文件中定义(即实现)了这个函数函数,那么就不需要声明就可使用了,当然你声明也不会错。



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

#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 编辑 ]
#3
yxb00012009-09-26 02:44
这是函数与主程序的区别。

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

函数是辅助性的,只有在main之外定义才能多次使用。如果在此之内定义,则只能使用一次。
#4
weixun2009-09-27 09:28
高手朋友,我想问一下程序的执行顺序是怎样的?是不是先执行上面的函数然后才接着执行main()程序啊?
#5
pangding2009-09-27 10:03
不是,是从main开始执行的。

其它函数只有当调用到时,才会执行。
不过,当然编译的时候不一定会从main开始了。
#6
weixun2009-09-27 14:36
那么函数放在main()和放在main()是没有区别的吗?是不是都是在main()中用到该函数时才执行的?如上例所示为什么函数函数放前和放后不一样呢?放前了不需要声明,但是放后了得要声明。
非常期待朋友们的回答!!!
谢谢
#7
pywepe2009-09-27 17:46
程序代码:
#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;
}
#8
forclwy2009-09-27 21:14
main()函数是整个程序的入口,从它开始执行。
楼上各位都说的很好啊。
#9
情叶2009-09-27 22:39
C语言中有段话:如果被调用函数出现在主函数之前,可以不必加以声明。因为编译系统已知道了已定义函数的有关情况,会根据函数首部提供的信息对函数的调用做正确的检查。     就像上楼手的编译不是从主函数开始
#10
pangding2009-09-27 23:33
回复 6楼 weixun
你写的源码是给编译器看的,只要它看不懂就会报错(一般就是指语法错误)。
比如调用函数时,编译要核查参数的个数和类型以及返回等等。如果编译器不知道函数的相关内容,就无法做出判断。
一般来说编译器,都是线性扫描源码的,就是顺序读过来。如果它读到这个地方,声明还没出现,那么由于后面的东西它还没有读,所以也不知道。
还有些东西可能是在别的文件中定义的,这个文件中本来就没有。那么,编译器显然也不知道到哪里去找,因此也需要声明来指出足够的细节。

这些跟程序的执行没有关系。编译器能看懂了,它才会按照指示生成可执行文件。可执行文件中包含了一系列指令,CPU可以直接解读,那时就没编译器什么事了。
换句话说,编译器就是把C代码翻译成CPU能看懂的指令。如果你说的话有语法错误,那么编译器就会拒绝翻译,否则它就会把语句翻译好。之后就没什么事了,CPU自己怎么去读,不是编译器的工作。
#11
微软MVP2009-10-01 18:55
如果函数A在主函数之前就定义了,那么它就不用函数声明。但是,好的编程风格应该是函数1的声明...函数n的声明然后到主函数,然后给出函数定义。嗯。
#12
xxcc3092009-10-07 17:09
版主精辟
#13
自由战士2009-10-07 20:30
回复 9楼 情叶
你解释的很有道理。
#14
最左边那个2009-10-08 19:35
第10楼解释的好啊!理解的非常到位!
1