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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中,声明和定义有啥区别相关的知识,希望对你有一定的参考价值。

参考技术A 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");

C语言变量的定义和声明有啥不同?

参考技术A

C语言变量的定义和声明的不同之处:

1、变量在使用前就要被定义或者声明;

2、在一个程序中,变量只能定义一次,却可以声明多次;

3、定义分配存储空间,而声明不会

扩展资料:

变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在程序中,变量有且仅有一个定义。     

声明:用于向程序表明变量的类型和名字。

定义也是声明:当定义变量的时候我们声明了它的类型和名字。可以通过使用extern声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。     

extern声明不是定义,也不分配存储空间。事实上它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。     

只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。     

任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。

以上是关于c语言中,声明和定义有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

C语言结构体中struct和typedef struct有啥区别?

C语言中的.c和.cpp有啥区别?

C语言中用const声明全局变量赋初值和不赋初值有何区别?变量存放位置有啥不一样?

C语言变量的定义和声明有啥不同?

请教高手,C语言中,把变量定义在主函数之外和定义在主函数之内有啥区别?

在C语言中声明和定义的区别?