C语言中声明和定义的区别?
如果它指的是变量的声明和定义:
从编译原理来说,声明只是告诉编译器将使用某一类型的变量,但编译器不会为其分配任何内存。定义是分配内存。
对于下面两行代码:
void函数()
{
int a;
int b = 1;
a = 0;
}
对于第一行代码,编译器什么都不会做,直到第三句,a=0,才会为它分配堆栈中的任何东西;只有当。并且对于int b = 0;在这句话中,编译器将生成一条指令并给它赋值。如果反汇编,你看到的代码可能是这样的:
推1;
推0;
当然,不一定编译器也会这样做。也有可能在声明int a的时候,编译器会把一个废值放到栈上,赋给第三条,这取决于编译器的具体选择。因此,声明不一定是定义,但定义必须是定义。
但是,下面的语句必须只是一个语句:
外部整数a;
这个表中有一个int变量a,它必须在别处定义,所以编译器此时不会做任何分配内存的事情,因为它是一个声明,只说明下面的代码引用了一个符号,这个符号是int类型a。
如果你指的是函数的声明和定义:
声明:一般在头文件中,你对编译器说:这里我有一个函数叫function(),让编译器知道这个函数的存在。
定义:一般在源文件中,在函数的实现过程中编写函数体。