打印

请教C语言高手:下面这个函数为什么是非可重入函数

[复制链接]
3127|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
air2|  楼主 | 2007-11-30 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
平常人| | 2007-11-30 21:07 | 只看该作者

因为你的局部变量使用了static

static基本等同于全局变量,只是其它函数看不见它。

使用特权

评论回复
板凳
computer00| | 2007-11-30 21:35 | 只看该作者

keil C51的更霸道,即使你不加static,它也是不可重入的

因为keil C51使用了一种所谓的局部变量地址复用技术...

使用特权

评论回复
地板
王紫豪| | 2007-11-30 21:52 | 只看该作者

没办法啊,谁叫51的资源少了啊!

使用特权

评论回复
5
平常人| | 2007-11-30 21:55 | 只看该作者

如果不加static,也是不可重入的,它的手册中一定有说明

这种情况下,局部变量是分配到了堆中而不是栈中。

使用特权

评论回复
6
ayb_ice| | 2007-12-1 09:42 | 只看该作者

KEIL中有些函数也可能是重入的

当然这个函数本身要比较简单

使用特权

评论回复
7
quben| | 2007-12-3 15:02 | 只看该作者

路过

使用特权

评论回复
8
wswh2o| | 2007-12-6 17:14 | 只看该作者

不加static也不可重入

因为是他是地址做参数,来交换2个空间的数据

使用特权

评论回复
9
tombtomb| | 2007-12-8 11:35 | 只看该作者

路过学习

使用特权

评论回复
10
石湖天随| | 2007-12-10 11:37 | 只看该作者

这样写就可以了

void Swap(char* lpcX, char* lpcY) rerntrant
{
     char cTemp;  

     cTemp = *lpcX; 
     *lpcX = *lpcY; 
     *lpcY = cTemp;   

}

使用特权

评论回复
11
LittleKen| | 2007-12-10 12:18 | 只看该作者

楼上的也是不可重入的吧。

传入地址参数,不能保证可重入。

使用特权

评论回复
12
bxb_lhj| | 2007-12-11 13:34 | 只看该作者

指针作形参是可以作为重入函数的

因为各个线程都在用自己的,呵呵

使用特权

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

本版积分规则

3

主题

6

帖子

1

粉丝