air2 发表于 2007-11-30 17:27

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

void&nbsp;Swap(char*&nbsp;lpcX,&nbsp;char*&nbsp;lpcY)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;char&nbsp;cTemp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cTemp&nbsp;=&nbsp;*lpcX;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*lpcX&nbsp;=&nbsp;*lpcY;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*lpcY&nbsp;=&nbsp;cTemp;&nbsp;&nbsp;&nbsp;<br /><br />}<br /><br />编译原理下载:<br />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&nbsp;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个空间的数据<br />

tombtomb 发表于 2007-12-8 11:35

路过学习

石湖天随 发表于 2007-12-10 11:37

这样写就可以了

void&nbsp;Swap(char*&nbsp;lpcX,&nbsp;char*&nbsp;lpcY)&nbsp;rerntrant<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;cTemp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cTemp&nbsp;=&nbsp;*lpcX;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*lpcX&nbsp;=&nbsp;*lpcY;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*lpcY&nbsp;=&nbsp;cTemp;&nbsp;&nbsp;&nbsp;<br /><br />}<br />

LittleKen 发表于 2007-12-10 12:18

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

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

bxb_lhj 发表于 2007-12-11 13:34

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

因为各个线程都在用自己的,呵呵
页: [1]
查看完整版本: 请教C语言高手:下面这个函数为什么是非可重入函数