新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
声明就是声明一下我用到的变量或者类型,变量或者类型的实际定义并不一定在本文件内。
我们提供的服务有:成都网站设计、成都网站建设、微信公众号开发、网站优化、网站认证、四子王ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的四子王网站制作公司
给变量分配了空间才叫做定义,否则就是声明
比如extern int a; 是声明,a的定义是在别处,这里并没有为a分配空间。
比如int a;即是定义
函数以及类型,声明就是用函数或者类型的头部来声明
比如 struct x;声明 struct x{};定义
比如 int fun();声明 int fun(){}定义
如果是指变量的声明和定义:
从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。
对于下面的两句代码:
void Func()
{
int a;
int b=1;
a=0;
}
对于第一行代码,编译器不会做任何事,它不会为它在栈中分配一点东西,直到第三句,a=0;时,编译器才会将其压入栈中。而对于int b=0;这一句,编译器就会生成一条指令,为它赋值。如果反汇编,看到的代码可能是这样的:
push 1;
push 0;
当然,并不一定编译器就会样做,也有可能在声明int a时,编译器就会把一个废值入栈,到第三条再为其赋值,这要看编译器的具体取舍,所以,声明不一定不是定义,而定义一定是定义。
但是,下面的声明,一定仅仅是声明:
extern int a;
这表时,有一个int变量a,它一定是在另外其他地方定义的,所以编译器此时一定不会做什么分配内存的事,因为它就是声明,仅仅表明下面的代码引用了一个符号,而这个符号是int类型的a而已。
如果是指函数的声明和定义:
声明:一般在头文件里,对编译器说:这里我有一个函数叫function() 让编译器知道这个函数的存在。
定义:一般在源文件里,具体就是函数的实现过程 写明函数体。
函数声明是通知程序,该函数是存在的
函数定义是通知程序,该函数是什么(函数的实现)
一般如果函数定义放在文件的最前面,那么可以不使用函数声明,但不规范
所以,最好是使用函数声明(也是放在文件的最前面,最好是在头文件中声明)
请采纳,谢谢
楼主可以这样想,C语言中,无论是常量,变量,函数,只有先定义才能使用的。在函数定义时,大脑要往一般的常量,变量定义的方向,切忌先不要想函数的别的。定义好后,把函数的定义先放一边,不管它。
接着是函数声明,大家都知道,C语言是有一个主函数main()和0或n个普通函数组成的。由于当代码越长,用到的函数就越多,为了减少函数的混淆,所以要有个函数名,就像老师点名一样,声明一个函数,就如点一个学生的名字。
总之,函数定义是系统要求的,不定义就错误,而函数声明实际上不定义也行,但为了方便和减少错误,人为规定要声明。