20130712--細節問題

代碼效率問題!

實現一個功能,插入一個數組成員。


我寫的:

int gw_cfm_md_set(const char *name, int level)
{
    int index = -1;
    int i = 0;
                                           
    for(i = 0; i < GW_CFM_MD_INSTANCES_NUM; ++i)
    {
        /* Check old */
        if(GW_CFM_MD_ACTIVE == gw_cfm_md[i].active)
        {
            if( 0 == strcmp(gw_cfm_md[i].md_name, name) )
            {
                index = i;
                break
            }
        }
        /* Set new */
        else
        {         
            gw_cfm_md[i].active = GW_CFM_MD_ACTIVE;
            if(name)
            {
                memcpy(gw_cfm_md[i].md_name, name, GW_CFM_MD_NAME_LEN);
            }
            gw_cfm_md[i].level = level;
            index = i;
            break;
        }
    }
    return index;
}



王荻寫的:

int gw_cfm_md_set(const char *name, int level)
{
    int index = -1;
    int i = 0;
    /* Check old */
    for(i = 0; i < GW_CFM_MD_INSTANCES_NUM; ++i)
    {
        if(!strncmp(name, gw_cfm_md[i].md_name, GW_CFM_MD_NAME_LEN))
        {
            return i;
        }
    }
    /* Set new */
    for(i = 0; i < GW_CFM_MD_INSTANCES_NUM; ++i)
    {
        if(GW_CFM_MD_NON_ACTIVE == gw_cfm_md[i].active)
        {
            index = i;
            gw_cfm_md[i].active = GW_CFM_MD_ACTIVE;
            memcpy(gw_cfm_md[i].md_name, name, GW_CFM_MD_NAME_LEN);          
            gw_cfm_md[i].level = level;
            break;
        }
    }
    return index;
}

   我只用了一個for,效率高吧。


   等到用的時候就錯了!如果數組下標用了0、1、2、3、4,刪除了3之後,我想查找4。用我的代碼,將會發現數組3沒用,就會添加在數組下標3裏,造成代碼錯誤。

   所以,代碼寫完後,把自己當做使用人員,從各個角度考慮一下代碼的可靠性,這樣能省去很多的修改BUG時間,這纔是真正的節約時間。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章