请教C语言高手:下面这个函数为什么是非可重入函数
void Swap(char* lpcX, char* lpcY)<br />{<br /> static char cTemp; <br /><br /> cTemp = *lpcX; <br /> *lpcX = *lpcY; <br /> *lpcY = cTemp; <br /><br />}<br /><br />编译原理下载:<br />http://download.csdn.net/sort/tag/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86/4因为你的局部变量使用了static
static基本等同于全局变量,只是其它函数看不见它。keil C51的更霸道,即使你不加static,它也是不可重入的
因为keil C51使用了一种所谓的局部变量地址复用技术...没办法啊,谁叫51的资源少了啊!
如果不加static,也是不可重入的,它的手册中一定有说明
这种情况下,局部变量是分配到了堆中而不是栈中。KEIL中有些函数也可能是重入的
当然这个函数本身要比较简单路过
不加static也不可重入
因为是他是地址做参数,来交换2个空间的数据<br />路过学习
这样写就可以了
void Swap(char* lpcX, char* lpcY) rerntrant<br />{<br /> char cTemp; <br /><br /> cTemp = *lpcX; <br /> *lpcX = *lpcY; <br /> *lpcY = cTemp; <br /><br />}<br />楼上的也是不可重入的吧。
传入地址参数,不能保证可重入。指针作形参是可以作为重入函数的
因为各个线程都在用自己的,呵呵
页:
[1]