DNM U经理c
struct DNM_s
{
uint32_t Addr;
uint32_t SerialNum;
uint32_t SubnetMask;
uint16_t Tick;
uint8_t Name[NAME_SIZE];
}DNMTemp;
pDNM DNMManager_New(void) //reentrant?
{
return &DNMTemp;
}
GeeksForGeeks表示:为了可重入,函数不能使用全局和静态数据。
在这种情况下,我使用全局数据“DNMTemp”。但是,DNMTemp的值没有更改,函数只返回其地址。
最佳答案
对。
摘自reentrancy的标签:
如果子例程可以在前一次调用完成之前安全地调用,则该子例程被视为可重入的。
在您的例子中,由于函数只返回全局(静态)变量的地址,该地址在程序启动后应保持不变,因此该函数很可能是重新进入的。
在IMO中,可重入函数可以访问全局和静态数据,而无需更改任何数据,因此获取全局变量的地址对可重入函数来说并不坏。
关于c - 该功能可重入吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54263819/