怎樣定義函數(shù)入?yún)ⅲ?/strong>
那么printf()如何確定變參的個(gè)數(shù)呢。
我猜測通過統(tǒng)計(jì)第一個(gè)參數(shù)(即parmN)(意即format參數(shù))中的%d,%f等格式字符串的個(gè)數(shù)來確定參數(shù)列表的長度(其實(shí)是終止地址),如果格式化字符串中的個(gè)數(shù)少于變參個(gè)數(shù),多的會(huì)讀不到。這樣的話可以自己實(shí)現(xiàn)一個(gè)printf函數(shù)了。建議看一看va_list,va_start()等宏的原型就清楚了。
parmN最主要的作用就是確定初始地址。
大多數(shù)情況va_list是char*類型,就是用來存地址的,所以應(yīng)該可以直接對parmN copy一份地址,va_start然后重新訪問整個(gè)參數(shù)列表(好像多余了)。