extern 和static区别

static 我了解的是 只能用于本文件,而不能被其他文件使用,这里的不能被其他文件使用 是什么意思呢。假设 在note1.c文件中定义static int A; 那么在note2.c文件中,是不能用A做为变量名吗?

static是静态存储类型,属于局部变量,只能用于同一个函数内,在其他函数内使用是错误的。extern是外部存储类型,属于全局变量,可以用于从他定义开始的后续所有函数内。

假设 在note1.c文件中定义static int A; 那么在note2.c文件中,是不能用A做为变量名吗?note2.c不能引用note1.c内的A,但是可以用A做变量名,切记:虽然都是命名为A,但是他们是不同的量追问

您的意思是当在note1.c文件中定义static int A以后,可以用A继续做note2.c文件中的变量名 ,但是note2.c文件不会在引用note1.c文件中A的数值,这里说数值对吗?

追答

是的。如果note1和note2都定义了A【都要定义,即声明,不然是错误的】,在引用时,note1只能引用自己范围内的A,note2也只能引用自己范围内的A,不会引用到另一个文件中的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-31
extern 外部变量声明
static 静态变量声明
第2个回答  2011-09-01
static的作用是将变量设置为静态变量,一般使用在某个函数里。
比如
void fun()
{
static int a ;
……
}
那么第一次调用该函数后,下次再调用的时候a还保持了上次的值。
extern主要用于多文件变量的声明。
比如程序代码由2个文件组成,在第一个文件中你定义了全局变量a,在第二个文件中要使用这个a,那么就需要在外部使用extern int a,这样在编译第二个文件的时候,计算机就知道有一个叫a的变量在其它文件中做过定义,并寻找到相应定义的位置。
第3个回答  推荐于2017-09-23
extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。
static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语言中也是有出现的,只是有着不同的作用。
区别在于:
1、全局变量是不显式用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量;
2、全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
相似回答