代碼效率問題!
實現一個功能,插入一個數組成員。
我寫的:
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時間,這纔是真正的節約時間。