关于C语言的函数声明,是不是过时了?

来源:百度知道 编辑:UC知道 时间:2024/05/23 09:47:15
我学了老谭的那本C语言,上面说过函数要先声明,但是我怀疑这套理论是不是过时了?书上说编译的时候是一行一行往下读,但是我记得我大学老师是说开始编译直接先找main函数,并不管main()函数在哪,并不是一行一行下读的,而且我用vc6.0写代码好像并没有声明也能编译成功,请问用现在的开发工具是不是不用声明函数了?

我是写C语言,没用过C++
那我这个程序怎么能编译成功呢?我事先没声明过max函数
#include "stdio.h"
main()
{
int a,b,c,d,e,f,g,h,i,j,s;
printf("请输入10个整数\n");
scanf("%d %d %d %d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
s=max(a,b);
s=max(s,c);
s=max(s,d);
s=max(s,e);
s=max(s,f);
s=max(s,g);
s=max(s,h);
s=max(s,i);
s=max(s,j);
printf("最大的数是%d",s);

}
max(int x,int y){
int z;
if(x>y)
z=x;
else z=y;
return(z);
}

老师说的不准确,当程序编译的时候,并不是先找main(),而是顺序地读代码,会首先将函数定义,宏定义,常量等预处理放入内存,如果没有,也没关系,然后找到main(),将其放入内存里,然后在看main()里面有没有调用到其他的函数,如果有,就到先前的内存里找到该函数的声明,如果有声明过,编译就没问题。然后在找其他函数的定义,将其地址关联到之前函数声明。

结论是,编译时,代码绝对是一行一行往下读的,你们老师对内存懂地很少。

你老师说的不对,要不就是你记错了,运行的时候是先找main()作为入口,编译的时候是从上到下。另外,如果子函数在main()前面,也可以不声明。
至于你说用VC6.0不用声明,不清楚情况,难道它的编译器改进了?

首先,编译的过程是从头文件开始的,任何IDE都是一行一行的读。
其次,你大学老师说的是程序执行的时候,直接找main函数,因为他是程序的入口。
最后,你没有声明就能编译,是因为你写的顺序正确,函数定义写在main函数之前,那么在main里就可以直接调用了,相当于声明的同时定义了。

不会啊,C语言里任何一个变量都要声明后才能使用的

你的vc6.0这么厉害,为什么我用vc6.0编绎你的程序就过不了?
D:\Program Files\vc6.0\MSDev98\Bin\wanglouanquan.cpp(8) : error C2065: 'max' : undeclared identifier
D:\Program Files\vc6.0\MSDev98\Bin\wanglouanquan.cpp(20) : error C2373: 'max' : redefinition; different type modifiers

系统在变化,据最新的资料来说,应该不用了的