對(duì)函數(shù)的輸入?yún)?shù)進(jìn)行適當(dāng)?shù)臋z查
經(jīng)常會(huì)有這樣的程序:
foo(char* str)
{
int len = strlen(str);
……
}
char* GetUserName(struct user* pUser)
{
return pUser->name;
}
No!Please don’t do like that!。你應(yīng)該先判斷一下傳進(jìn)來(lái)的那個(gè)指針是不是為空(NULL)。如果傳進(jìn)來(lái)的指針為空的話,那么,你的一個(gè)大的系統(tǒng)就會(huì)因?yàn)檫@一個(gè)小的函數(shù)而崩潰。一種更好的技術(shù)是使用斷言(assert)。當(dāng)然,如果是在C++中,
使用引用要比指針好得多,但你也需要對(duì)各個(gè)參數(shù)進(jìn)行檢查。寫(xiě)有參數(shù)的函數(shù)時(shí),首要工作,就是要對(duì)傳進(jìn)來(lái)的所有參數(shù)進(jìn)行合法性檢查。而對(duì)于傳出的參數(shù)也應(yīng)該
進(jìn)行檢查,這個(gè)動(dòng)作當(dāng)然應(yīng)該在函數(shù)的外部,也就是說(shuō),調(diào)用完一個(gè)函數(shù)后,應(yīng)該對(duì)其傳出的值進(jìn)行檢查。當(dāng)然,檢查會(huì)浪費(fèi)一點(diǎn)時(shí)間,但為了整個(gè)系統(tǒng)不至于出現(xiàn)
“非法操作”或是“Core Dump”的系統(tǒng)級(jí)的錯(cuò)誤,多花這點(diǎn)時(shí)間還是很值得的。