本文目录一览:
- 1、在C语言中,一个文件中定义的 全局变量,在另一个文件中能用吗?
- 2、怎样使C语言全局变量在多个文件中使用?
- 3、一个.c文件中声明全局变量的结构体,另一个.c的文件中调用函数修改它
- 4、关于C语言中变量在两个.C文件中的调用问题
在C语言中,一个文件中定义的 全局变量,在另一个文件中能用吗?
全局变量extern可以在其他源程序中使用;全局变量static只能在本程序中使用。
全局变量是使用相同的内存块在整个类中存储一个值。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。
扩展资料:
使用注意
全局变量的存在主要有以下一些原因:
1、使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不应该算什么问题,除非使用的是巨大对象的全局变量,能避免就一定要避免。
2、使用全局变量程序运行时速度更快一些(因为内存不需要再分配),同样也快不了多少。
3、对于局部变量的名字空间污染,这个在不使用太多变量时是可以避免的。
4、当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。
5、还可以用extern在函数外对全局变量声明,使全局变量的作用域从声明处到文件的结束。
6、全局变量的优先度低于局部变量。
参考资料:百度百科-全局变量
怎样使C语言全局变量在多个文件中使用?
extern 关键字
extern int i;这样就可以在其他文件中使用
在头文件中声明
a.h
extern int i;
在其他某个c文件中定义
int i =0;
其他要使用i变量的c源文件只需要include"a.h"就可以
一个.c文件中声明全局变量的结构体,另一个.c的文件中调用函数修改它
应该分为3个文件,一个头文件存储结构体定义供其它.c文件使用,一个.c文件中定义全局变量,另一个.c文件中声明使用全局变量,并通过函数修改该全局变量
a.h //存放结构体定义
#ifndef _A_H
#define _A_H 1
struct motor
{
INT16S goal_speed;//
INT16S current_speed;//
};
#endif
def.c //文件用来定义全局变量(注意不是声明,定义是要分配内存的)
#include "a.h"
struct motor mymotor;
//加入其它处理代码
call.c //用来实现操作全局变量的函数
#include "a.h"
extern struct motor mymotor; //这是引用外部变量的前置声明,否则直接使用单独编译该文件时会提示变量未定义
void refresh_status(struct motor *ptr);//状态刷新函数
{
INT16S i;
i=ptr-goal_speed - ptr-current_speed;//这里做减法运算
}
调用方式
refresh_status(mymotor);
关于C语言中变量在两个.C文件中的调用问题
我有几个方案,我经常在VC下使用,都没问题,你试试:
方案1:在一个文件中定义全局变量“类型 tmp;”,注意是全局变量。另一个文件全局变量的位置使用“extend 类型 tmp;”。
方案2:把hal.c文件里的函数参数加一个指向tmp的指针,tmp在main中,在hal.c里的文件使用tmp时,把地址传过去就行了。
例如:
mian()
{
char tmp;
.....
.....
}
function(tmp;...;...);
...
}
在hal.c里面
function(char *tmp;...;...)
{
....
}
这样就行了
方案1、2都不用hal.h
方案3:你把hal.c的子函数写进hal.h,在mian函数之前include一下就行了。
但不推荐此方法。
对你出现的问题的理解:
你在hal.h中声明了tmp,在两个文件里都包含它,表示包含了两次,C语言规定如果没有限定为局部变量,则各个文件都可以调用,这就导致你声明了两个名称相同的同类型变量,当然不行。
如果定义为局部变量,那么另一个文件就没办法用它了,或者这么说:两个文件各有一个tmp但不是同一个tmp,改变一个的值,另一个不变。
常用方法就是extend一下(方案1)。
顺便说一句,我从来没用过unsigned char类型,因为char类型本身就是非负的,可能是因为编译器的关系吧