C语言程序中,如何合理地读写全局变量?

        在编写大型程序时,为了实现相应的功能和需求,通常会编写出多个源文件和头文件,不同的源文件和头文件负责不同的功能实现,比如a1.c a2.c a3.c文件实现功能a,b1.c b2.c b3.c文件实现功能b。现在,实现一个新的功能c,可能需要读写功能a中的某些全局变量,如何读写这些全局变量算是合理地呢?这里说的合理,指的是模块a和模块c之间具有低耦合,相互独立。

下面示范几个例子,着重讨论裸机状态下读写全局变量的合理方法。

(1)读取变量

方法一

a1.c文件中的代码

static int varStudentScore;

int readvarStudentScore(void)

{

        return varStudentScore;
}

c1.c文件中读取a1.c中全局变量的代码

void fun(void)

{

        int varStudentScore;

        varStudentScore=readvarStudentScore();

}

方法二

a1.c文件中的代码

static int varStudentScore;

static char varStudentName[100];

void readvarStudentData(int* score, char * name, int namesize)

{

        *score=varStudentScore;

        strncpy(name,varStudentName,namesize);

        name[namesize-1]='\0';

}

c1.c文件中读取a1.c中全局变量的代码

void fun(void)

{

        int varStudentScore;

        char varStudentName[90];

        readvarStudentData(&varStudentScorevarStudentName,90);

}

        方法一和方法二都能读取另外一个模块/文件的全局变量,不同的是,方法一支持读取一个变量,方法二支持同时读取多个变量。由于每次需要调用函数会有进栈入栈,两种方法也带来了额外地系统开销。如果方法一和方法二仅仅运用在编写应用程序,额外的系统开销可以忽略不计,毕竟不是在编写操作系统内核。

(2)修改变量

a1.c文件中的代码

static int varStudentScore;

void modifyvarStudentScore(int score)

{

        varStudentScore=score;

}

c1.c文件中的代码

void fun(void)

{

        int modifyscore=99;

        modifyvarStudentScore(modifyscore);

}

        以上讨论的情况都是裸机状态下的,实时操作系统RTOS下全局变量的读写(多线程之间的通信方法)将有很大不同,将另起一篇文章进行描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值