函式訪問引數受限的處理方法

田園詩人之園發表於2016-01-07

在我們使用函式的時候,有很多時候由於引數長度的限制而導致我們功能不完善。
比如:
int funcA(char offlen, unsigned char len, char *pbuf)
{

}

int funcB(char offlen, int len, char *pbuf)
{
unsigned long ulRet = 0;
ulRet = funcA(offlen, (char)len, pbuf);

}
現在我們有一個main函式要訪問funcB函式,獲取它的返回資料pbuf的內容,我們在傳參的時候,如果傳進去一個len大於255長度的引數,那我很明顯這個函式會返回失敗,在這種情況下我們該如何處理呢?
方法一:
修改funcA的函式原型,將其修改為:
int funcA(char offlen, unsigned int len, char *pbuf)
{

}
這是一種比較好的方法,但是若是其中有某些delay呢,而且其中的delay是cpu死等的處理方式,我們該怎麼辦,如果我們傳如一個很大的是資料很可能就會導致cpu的掛死;
方法二:
修改將funcA的原型保留,但是給其修改一個名字,funcC,然後我們在使用funcA這個函式名字去封裝funcC,這樣對外的介面不會改變,但是我們的功能已經作出完善了。
int funcC(char offlen, unsigned char len, char *pbuf)
{

}
int funcA(char offlen, unsigned char len, char *pbuf)
{
if(len < 255)
funcC(offlen, len, pbuf);
else
{…
for(i=0;i<(len/255);i++)
{
funcC(offlen+(i*255), len, pbuf);
}
}
}
這種處理方式可以很好的解決我們的問題

相關文章