答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误fu1.h:[cpp] view plaincopyprint?#ifndef FF1_h #define FF1_h #include void setone(); #endif #ifndef FF1_h
#define FF1_h#includevoid setone();#endiffu1.c:[cpp] view plaincopyprint?#include"fu1.h" int i; void setone() { printf("%d/n", i); } #include"fu1.h"int i;void setone(){printf("%d/n", i);}fu2.h
[cpp] view plaincopyprint?#ifndef FF2_h #define FF2_h #include void settwo(); #endif #ifndef FF2_h
#define FF2_h#includevoid settwo();#endiffu2.c
[cpp] view plaincopyprint?#include"fu2.h" int i; void settwo() { printf("%d/n", i); } #include"fu2.h"int i;void settwo(){printf("%d/n", i);}test.c
[cpp] view plaincopyprint?#include"fu1.h" #include"fu2.h" int i=36; int main(void) { printf("%d/n", i); i =3; setone(); i = 6; settwo(); } #include"fu1.h"
#include"fu2.h"int i=36;int main(void){printf("%d/n", i);i =3;setone();i = 6;settwo();}运行结果:3636fu1.h
[cpp] view plaincopyprint?#ifndef FF1_h #define FF1_h #include void setone(); #endif #ifndef FF1_h
#define FF1_h#includevoid setone();#endiffu1.c
[cpp] view plaincopyprint?#include"fu1.h" int i= 86; void setone() { printf("%d/n", i); } #include"fu1.h"int i= 86;void setone(){printf("%d/n", i);}test.c
[cpp] view plaincopyprint?#include extern int i; int main(void) { printf("%d/n", i); i =3; printf("%d/n", i); setone(); } #includeextern int i;int main(void){printf("%d/n", i);i =3;printf("%d/n", i);setone();}运行结果:8633fu1.h
[cpp] view plaincopyprint?#ifndef FF1_h #define FF1_h #include #include void setone(); #endif #ifndef FF1_h
#define FF1_h#include
#includevoid setone();#endiffu1.c
[cpp] view plaincopyprint?#include"fu1.h" static int i; void setone() { printf("%d/n", i); } #include"fu1.h"static int i;void setone(){printf("%d/n", i);}fu2.h
[cpp] view plaincopyprint?#ifndef FF2_h #define FF2_h #include #include void settwo(); #endif #ifndef FF2_h
#define FF2_h#include
#includevoid settwo();#endiffu2.c
[cpp] view plaincopyprint?#include"fu2.h" static int i; void settwo() { printf("%d/n", i); } #include"fu2.h"static int i;void settwo(){printf("%d/n", i);}test.c