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

[复制链接]
 楼主| air2 发表于 2007-11-30 17:27 | 显示全部楼层 |阅读模式
void Swap(char* lpcX, char* lpcY)
{
     static char cTemp;  

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

}

编译原理下载:
http://download.csdn.net/sort/tag/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86/4
平常人 发表于 2007-11-30 21:07 | 显示全部楼层

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

static基本等同于全局变量,只是其它函数看不见它。
computer00 发表于 2007-11-30 21:35 | 显示全部楼层

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

因为keil C51使用了一种所谓的局部变量地址复用技术...
王紫豪 发表于 2007-11-30 21:52 | 显示全部楼层

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

平常人 发表于 2007-11-30 21:55 | 显示全部楼层

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

这种情况下,局部变量是分配到了堆中而不是栈中。
ayb_ice 发表于 2007-12-1 09:42 | 显示全部楼层

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

当然这个函数本身要比较简单
quben 发表于 2007-12-3 15:02 | 显示全部楼层

路过

wswh2o 发表于 2007-12-6 17:14 | 显示全部楼层

不加static也不可重入

因为是他是地址做参数,来交换2个空间的数据
tombtomb 发表于 2007-12-8 11:35 | 显示全部楼层

路过学习

石湖天随 发表于 2007-12-10 11:37 | 显示全部楼层

这样写就可以了

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

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

}
LittleKen 发表于 2007-12-10 12:18 | 显示全部楼层

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

传入地址参数,不能保证可重入。
bxb_lhj 发表于 2007-12-11 13:34 | 显示全部楼层

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

因为各个线程都在用自己的,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部