×

c全局变量在其他文件改动

c全局变量在其他文件改动(c语言全局变量可以被其他c文件使用吗)

admin admin 发表于2023-04-02 10:06:07 浏览52 评论0

抢沙发发表评论

本文目录一览:

在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类型本身就是非负的,可能是因为编译器的关系吧