声明变量是为了通知编译器以下信息:变量的名称,其所持有的值的类型以及其初始值(如果有的话)。即,声明提供了有关变量属性的详细信息。而变量的定义说明了变量的存储位置。即,在定义变量期间分配变量的内存。
在C语言中,变量的定义和声明是同时进行的。即声明和定义之间没有区别。例如,考虑以下声明
int a;
在这里,诸如变量名:a和数据类型:int之类的信息被发送到编译器,该信息将存储在称为符号表的数据结构中。伴随此,将分配大小为2个字节的内存(取决于编译器的类型)。
假设,如果我们只想声明变量而不是定义变量,即我们不想分配内存,则可以使用以下声明
extern int a;
在此示例中,仅发送有关变量的信息,并且不进行内存分配。以上信息告诉编译器,变量a现在已声明,而其内存将稍后在同一文件或不同文件中定义。
函数的声明为编译器提供了函数的名称,函数的数量和类型以及返回类型。例如,考虑以下代码,
int add(int, int);
在这里,名为add的函数声明了2个类型为int且返回类型为int的参数。在此阶段将不会分配内存。
该函数的定义用于为该函数分配内存。例如,考虑以下函数定义,
int add(int a, int b)
{
return (a+b);
}
在此函数定义期间,将分配用于函数添加的内存。变量或函数可以声明多次,但是只能定义一次。
下表总结了以上几点,
Declaration | Definition |
---|---|
A variable or a function can be declared any number of times | A variable or a function can be defined only once |
Memory will not be allocated during declaration | Memory will be allocated |
The above is a function declaration. This declaration is just for informing the compiler that a function named f with return type and argument as int will be used in the function. |
The system allocates memory by seeing the above function definition. |