局部变量的声明即是定义:
void fun(){
int a = 1 //既是声明,也是定义,初始值为1
int b //既是声明,也是定义,初始值伪随机。
}
全局变量只能定义一次,可以声明多次,在全局变量不可见的地方但又想使用就得进行声明。
同一个文件中,比如main.c:
extern int a //声明,不再分配内存,extern关键字表示此变量已在其它地方定义。
void fun(){
printf("%d\n",a) //此处用到了全局变量a,而a是在后面定义,所以需要在前面再声明一次。
}
int a = 1 //全局变量a定义,为它分配内存
int main()
{
fun()
return 0
}
不同文件中:
fun.h:
void fun() //函数声明
fun.c:
extern int a //声明,不再分配内存,extern关键字表示此变量已在其它地方定义。
//函数定义
void fun(){
printf("%d\n",a) //此处用到了全局变量a,而a是在另外一个源文件中定义,所以需要在前面再声明一次。
}
main.c:
#include "fun.h"
int a = 1 //全局变量a定义,为它分配内存
int main()
{
fun()
return 0
}
前面主要是针对变量的声明和定义的说明,当然也提到了函数的声明与定义。
函数和变量一样,使用前一定要先声明或者定义,定义本身也是一次声明。
//此处定义函数,有函数体,当然也是一次声明。
void fun(){
printf("hello world\n")
}
int main()
{
fun() //fun函数在前面已经定义,所以可直接调用
return 0
}
另一例子:
void fun()//此处须声明一次(没有函数体),main函数才能调用它。
int main()
{
fun() //fun函数在后面定义。
return 0
}
//此处定义函数,有函数体,当然也是一次声明。
void fun(){
printf("hello world\n")
}
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何
从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的.声明可以出
现多次.
第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量
名或对象名.比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预
订,别人再也不允许使用这个座位.其实这个时候你本人并没有坐在这个座位上.这种声
明最典型的例子就是函数参数的声明,例如:
void fun(int i, char c)好,这样一解释,我们可以很清楚的判断:a)是定义b)是声明.
简单地说,声明就是告知编译器,后续代码中会有这样东西,而定义是告知编译器真的申请一块内存来存储这样东西。对于变量来说,声明和定义几乎是相同的,尤其是在同一个文件中声明或者定义变量。但如果是使用其他源文件中的变量,可以使用extern关键字进行声明,表示该变量由其他人定义,我这边仅仅是拿过来用一下。
对于函数来说,如果只给定了函数的名称、参数列表和返回值,就是声明,告知使用者函数的样子,而定义是除了声明的三部分之外,还要包含函数体,说明函数是如何实现的。