声明和定义的区别

关于声明、定义、初始化、赋值的定义,可以见下图。

上述只是简要概述。

定义 是一种特殊的声明。如果建立存储空间的声明成为定义,反之则称为声明。

声明:不需要建立存储空间。e.g.:extern int a,a为外部定义的对象,这种情况属于声明,不会建立存储空间。

变量:需要建立存储空间。e.g.:int a,在声明a时候完成定义,建立存储空间。

实例:

1 void bind()
2 {
3 extern int a;//声明了外部已经定义了的变量a  注意:声明外部变量时可以把变量类型去掉如:extern a;
4 post();
5 }
6 int a;//定义整数型变量a,建立存储空间

外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。

系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。

对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。所谓的“声明”,其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。extern 只作声明,不作任何定义。

(我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。)

用static来声明一个变量的作用有二:

(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

(2)外部变量用static来声明,则该变量的作用只限于本文件模块。

PS:在c中所有的变量和函数需要先声明才能使用。但是在C#中只要存在就可以使用,所以在C#中声明和定义从使用上来说是一样的

原文地址:https://www.cnblogs.com/wqtmelo/p/7541631.html