声明和定义的区别
关于声明、定义、初始化、赋值的定义,可以见下图。
上述只是简要概述。
定义 是一种特殊的声明。如果建立存储空间的声明成为定义,反之则称为声明。
声明:不需要建立存储空间。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#中声明和定义从使用上来说是一样的