加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何引用一个已经定义过的全局变量

(2012-08-10 14:45:15)
标签:

c

分类: 程序语言

1.如何引用一个已经定义过的全局变量?   
答:extern  可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方

式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报

错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而

在连接期间报错。
  
2.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?   
答:可以,在不同的C文件中以static形式来声明同名全局变量。   可以在不同的C文

件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不

会出错
3.通过下例要看出static全局变量与普通的全局变量有什么区别来?
  全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本

身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无

不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个

源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制

了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使

用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,

因此可以避免在其它源文件中引起错误
fu1.h:
[cpp] view plaincopyprint?#ifndef FF1_h  
#define FF1_h  
 
#include<stdio.h>  
 
void setone(); 
 
#endif 
#ifndef FF1_h
#define FF1_h

#include<stdio.h>

void setone();

#endif
fu1.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<stdio.h>  
 
void settwo(); 
 
#endif 
#ifndef FF2_h
#define FF2_h

#include<stdio.h>

void settwo();

#endif
fu2.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();
}
运行结果:
36
3
6
fu1.h
[cpp] view plaincopyprint?#ifndef FF1_h  
#define FF1_h  
 
#include<stdio.h>  
 
void setone(); 
 
#endif 
#ifndef FF1_h
#define FF1_h

#include<stdio.h>

void setone();

#endif
fu1.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<stdio.h>  
 
extern int i; 
 
int main(void) 

        printf("%d/n", i); 
        i =3; 
        printf("%d/n", i); 
        setone(); 

#include<stdio.h>

extern int i;

int main(void)
{
        printf("%d/n", i);
        i =3;
        printf("%d/n", i);
        setone();
}
运行结果:
86
3
3
fu1.h
[cpp] view plaincopyprint?#ifndef FF1_h  
#define FF1_h  
 
#include<stdio.h>  
#include<stdlib.h>  
 
void setone(); 
 
#endif 
#ifndef FF1_h
#define FF1_h

#include<stdio.h>
#include<stdlib.h>

void setone();

#endif
fu1.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<stdio.h>  
#include<stdlib.h>  
 
void settwo(); 
 
#endif 
#ifndef FF2_h
#define FF2_h

#include<stdio.h>
#include<stdlib.h>

void settwo();

#endif
fu2.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
[cpp] view plaincopyprint?#include"fu1.h"  
#include"fu2.h"  
 
static int i = 40; 
 
int main(void) 

        printf("%d/n", i); 
        i =3; 
        printf("%d/n", i); 
        setone(); 
        i = 6; 
        settwo(); 

#include"fu1.h"
#include"fu2.h"

static int i = 40;

int main(void)
{
        printf("%d/n", i);
        i =3;
        printf("%d/n", i);
        setone();
        i = 6;
        settwo();
}
运行结果:
40
3
0
0

转自:http://blog.csdn.net/rwjlqn/article/details/5219655

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有