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/

10-11 22:12