打印
[嵌入式linux]

linux下应用程序的函数调用问题..极度郁闷!

[复制链接]
2464|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sassos|  楼主 | 2008-7-4 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c写的应用程序,遇到很郁闷的问题:
函数a{}和函数b{}都需要调用函数c{};在c{}中定义变量int cnt=0xaa;
函数a{}先调用c{,修改cnt=0x55;
接着函数b{}调用c{},取到的cnt的值却一直是0xaa;
极度郁闷,各位指点..........

相关帖子

沙发
sassos|  楼主 | 2008-7-4 16:51 | 只看该作者

sorry补充下..

cnt是定义的全局变量,初始值为0xaa

使用特权

评论回复
板凳
dragon_hn| | 2008-7-6 03:48 | 只看该作者

楼主还是把程序贴出来吧

使用特权

评论回复
地板
zbo210| | 2008-7-6 11:31 | 只看该作者

楼主又说在c{}中定义变量int cnt

楼主又说在c{}中定义变量int cnt,又说cnt是定义的全局变量,呵呵.自己先说明白了,据我理解,你其实定义的是俩个变量,一个是局部变量,一个是全局变量,只是名字相同儿已.
你可以这样做,在c{}中定义变量static int cnt=0xaa;
去掉全局变量定义应该就是了

主要还是楼主的c没过关,呵呵

使用特权

评论回复
5
harlemjia| | 2008-7-6 13:03 | 只看该作者

volitale

使用特权

评论回复
6
davidtina| | 2008-7-22 18:01 | 只看该作者

全局变量和局部变量混用了

楼主把c{}中定的int cnt=0xaa; int 删掉就可以了.因为外部已经定义了cnt.

使用特权

评论回复
7
davidtina| | 2008-7-22 18:06 | 只看该作者

但是

在c{}中,如果没有别的地方改动cnt的话,你返回时还是0xaa, 所以, 如果楼主要想得到想要的值, 最好是把int cnt=0xaa; 这一句全部删掉.

而把int cnt=0xaa;  初始化放在外部去定义.

使用特权

评论回复
8
WOAILYMD| | 2008-7-24 10:28 | 只看该作者

7楼的回答直接解决问题,顶!

所有问题,如能认真考虑并最好亲自实验后再做回答,那21IC就更上一层楼了。读者也节省了时间,同时也避免误人子弟和混淆视听。还有,提问者最好能对回答者做出是否解决问题的答复,这样才算一个问题圆圆满满,使得读者能学到完整的一个知识点!拙见,请拍砖,哈哈!

使用特权

评论回复
9
db10| | 2008-7-25 16:05 | 只看该作者

你两次调用C是在一个线程里吗?

 调用是要保持互斥,还要保证顺序。

使用特权

评论回复
10
lionstone| | 2008-8-1 10:22 | 只看该作者

函数局部变量赋值了,当然是这个结果了

我同意4楼的说法;
我想你的函数c应该是类似这样的吧?
int c(参数)
{
    int cnt=0xaa;
    xxx
    xxx
    ...
    xxx
}

这样的话,是一个局部变量,每次都被附了初值0xaa;如果不赋初值,那么理论上每次得到的cnt值都是随机的,但实际上多数情况都是0;

如果要实现你说的,按4楼的方法,改成int cnt=0xaa就行;

不过我觉得这样写的函数将有局限性,多个线程操作(需要多个cnt)时会有问题(没有多个cnt变量的副本);

使用特权

评论回复
11
sodwell| | 2008-8-11 10:07 | 只看该作者

re

写linux还是不要用单片机的方法,最好还是加些同步 互斥.... 机制
不然多线程操作 出现让你莫名其妙的错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

69

帖子

1

粉丝