现在的位置: 首页 > 综合 > 正文

C语言中,static关键字举例——全局static变量

2013年08月11日 ⁄ 综合 ⁄ 共 2227字 ⁄ 字号 评论关闭

C语言中,可以在全局作用域中使用static关键字:被static关键字修饰的变量或函数,仅在本".c文件"中可见,而在其他".c文件"中,不可见。例如,在t1.c中的全局作用域,定义static函数func,则在t2.c中,无法使用t1.c中定义的func函数,即使在t2.c中,使用extern关键字声明了func函数。

实验代码如下:

1、默认使用extern修饰符

/*file:t1.c*/

/*定义函数func,此时没有使用任何修饰符,
**所以默认使用extern修饰
*/
void func(){}

/*file:t2.c*/

/*声明func函数,该函数在t1.c中定义
**由于声明的是函数,所以,此时extern关键字,可以省略
*/
extern void func();

int main(){

	func();//调用func函数
	
	return 0;
}

编译结果:

编译通过

2、使用static修饰后,则仅在本".c文件"中可见

/*file:t1.c*/

/*定义函数func,此时使用static修饰*/
static void func(){}

/*file:t2.c*/

/*声明func函数,该函数在t1.c中定义,且被用static修饰*/
extern void func();

int main(){

	func();//error.func在t2.c中不可见
	
	return 0;
}

编译结果:

3、如何在“定义static函数的.c文件”中,声明static函数

从上面两则例程中可以看出,static确实可以让函数(或变量)仅在本“.c文件”中可见,而在其他".c文件"中不可见。然而经常地,我们需要“在某函数的定义代码之前,使用这个函数”,这就需要我们“声明该函数,然后使用调用该函数,然后定义该函数”,所以,这就涉及到,如何声明static函数,当然啦,肯定是在“定义该static函数的.c文件中,声明该static函数”。

/*file:t1.c*/

/***************************static声明*******************************/
//static 声明,static定义
static void func1();
static void func1(){}//func1是static函数,在其他.c文件中,不可见

//static 声明,默认定义
static void func2();
void func2(){}//func2也是static函数,在其他.c文件中,不可见

//static 声明,extern定义
static void func3();
extern void func3(){}//func3还是static,尽管它被定义为extern

/***************************extern声明*******************************/
//extern 声明,extern定义
extern void func4();
extern void func4(){}//func4是extern

//extern 声明,默认定义
extern void func5();
void func5(){}//func5是extern

//extern 声明,static定义
extern void func6();
static void func6(){}//func6是static

/****************************默认声明*******************************/
//默认声明,默认定义
void func7();
void func7(){}//func7是extern

//默认声明,extern定义
void func8();
extern void func8(){}//func8是extern

//默认声明,static定义
void func9();
static void func9(){}//func9是static

/*file:t2.c*/

/*声明func[1-9]函数,这些函数在t1.c中定义*/
extern void func1();
extern void func2();
extern void func3();
extern void func4();
extern void func5();
extern void func6();
extern void func7();
extern void func8();
extern void func9();

int main(){

	//凡是被static定义/声明的函数,都是static的,在其他".c文件"中均不可见:
	
	func1();//error.func1在t2.c中不可见
	func2();//error.func2在t2.c中不可见
	func3();//error.func3在t2.c中不可见
	func4();
	func5();
	func6();//error.func9在t2.c中不可见
	func7();
	func8();
	func9();//error.func9在t2.c中不可见
	
	return 0;
}

编译结果:

结论是:
1、使用static修饰的函数声明或定义,都会将该函数变为static函数,仅可在本“.c文件”中可见,如func1,func2,func3,func6,func9;
2、使用static修饰“未用static声明”的函数的定义,则会得到warning,如func6和func9.

抱歉!评论已关闭.