c语言中,声明和定义有什么区别

2020-10-17 科技 71阅读

C语言里可能经常会说:

声明变量时不会分配内存,定义变量时才会分配内存。

局部变量的声明即是定义:

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");
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com