48

问答题 48 /61

找错
#define MAX_SRM 256
DSN get_SRM_no()
{
    static int SRM_no;
    int I;
    for (I = 0; I < MAX_SRM; I++, SRM_NO++)
    {
        SRM_no %= MAX_SRM;
        if (MY_SRM.state == IDLE)
        {
            break;
        }
    }
    if (I >= MAX_SRM)
        return (NULL_SRM);
    else
        return SRM_no;
}

参考答案

1,SRM_no没有赋初值
2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。这里应该去掉static声明。