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

如题所述

如果是指变量的声明和定义:

从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。
对于下面的两句代码:
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() 让编译器知道这个函数的存在。

定义:一般在源文件里,具体就是函数的实现过程 写明函数体。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-09-12

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");
}

第2个回答  2017-08-28
/*这是声明,只是告诉编译器
"在某处有一个名称为a,接受一个int类型的形参,没有返回值(void)"
的函数,并没有给出具体实现(实现可能在其它文件中)*/
void a(int a);
.................
//这是函数定义,提供具体实现
void a(int a)
{
.........

}
另外形如
int a=10;
这种属于"声明的同时定义"
第3个回答  2017-08-09
自己理解:

声明:全局定义。
定义:可以全局,也可以局部。

其实用一个简单的例子就可以看出区别;可以用一个例子 测试一下输出,就可以完全理解。
第4个回答  2017-08-11
声明就是告诉你有这么个东西,具体在哪你不用管。
定义就是这个东西就是这。
声明可以有很多个,定义只能且必须有一个。
就好像你这个人就是一个定义,我告别人说有你这个人,就是声明。

c语言中声明和定义有什么区别
1、作用不同:声明是引入标识符和标识符的类型,方便以后引用。定义是实例代标识符,可为标识符分配存储空间,为标识符指定初始值,定义可以代替声明。2、使用次数:所有标识符只能有一次定义,而声明可以有多次。3、位置:变量的声明必须在使用或编写的文件内,而变量的定义可以在头文件中定义之后直接声明...

在C语言中声明和定义的区别
1、声明是当一个计算机程序需要调用内存空间时,对内存发出的“占位”指令,称为“声明”。2、定义是计算机使用判断或命题的语言逻辑形式,确定一个认识对象或事物在有关事物的综合分类系统中的位置和界限,使这个认识对象或事物从有关事物的综合分类系统中彰显出来的认识行为。

C语言变量的定义和声明有什么不同?
3、定义分配存储空间,而声明不会。

c语言中定义与声明有什么区别
定义是在内存中真的申请了空间,存储对应的对象。而声明只是告知编译器,程序中会有这个对象,有可能是在其他地方定义的,此时并不会直接申请内存空间。

C语言中定义与说明有什么不一样啊?
。声明则是指明哪些外部变量和函数可以用,声明的函数或变量都是在别处有定义的。声明的目的主要是为了让编译器检查数据类型是否正确,以及帮助编译器做一些参数匹配工作等。PS:C语言中有些声明允许不完全或者省略,但这样检查类型正确性的任务就全落在程序员身上,容易出错。所以应该避免。

c语言的定义与声明是什么
声明相当于普通的声明:它所说明的并非自身,而是描述替他地方的创建的对象,可以多次出现。定义相当于特殊的声明:它为对象分配内存,只能出现一次。比如说,int a[100]; 这就是一个定义,分配了内存空间。在别的文件中要用它时,可以用extern int a[];做声明,表明它在别处定义和分配存储空间的。

在C语言中,什么是声明、定义、初始化?有什么区别
声明和定义差不多,比如,声明一个变量,和定义一个变量,初始化就是将该变量赋初始值,比如int a = 0; 声明了一个int 类型的变量,变量名是a,初始值为0,给变量初始化很重要,因为该变量所在的内存可以已经有一个值了,不初始化,改变量可能是个垃圾值,对后面的计算有影响 ...

在C语言中,我不清楚内存是如何给变量分配内存单元的,声明了就分配内存单...
在C语言中声明和定义是不同的,只有当你定义变量的时候系统才会给你的变量分配内存,例如int a;(是定义),extern int a;(是声明),前者会分配,而后者不会;只要你定义变量就分配,int a;int a = 10;都是定义,都会分配!!

C语言和C++在声明和定义之间的区别是什么?
而定义,是明确告诉编译器,这个变量或函数的值和实现方式.一般来讲,声明变量并不会占用存储空间,而定义变量会占用存储空间.声明函数只提供函数的格式,定义函数则提供函数的实现代码.当然,很多时候,声明和定义是合并在一起的,这样的声明称为为定义声明.举例来讲:int test=1;\/\/这是一个定义声明,term被...

C语言 声明变量和定义变量各是什么?有什么区别呢?、谢谢!
定义变量需要为变量分配内存空间,而声明变量不需要,只是说明这个变量在其他函数模块定义过。如定义一个全局变量int a;在其他函数模块需要使用这个变量a,那么你就需要声明一下:extern int a

相似回答