新聞中心
printf原理?
printf函數(shù)的實現(xiàn)原理

成都創(chuàng)新互聯(lián)是專業(yè)的棗強網(wǎng)站建設(shè)公司,棗強接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行棗強網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
在C/C++中,對函數(shù)參數(shù)的掃描是從后向前的。C/C++的函數(shù)參數(shù)是通過壓入堆棧的方式來給函數(shù)傳參數(shù)的(堆棧是一種先進后出的數(shù)據(jù)結(jié)構(gòu)),最先壓入的參數(shù)最后出來,在計算機的內(nèi)存中,數(shù)據(jù)有2塊,一塊是堆,一塊是棧(函數(shù)參數(shù)及局部變量在這里),而棧是從內(nèi)存的高地址向低地址生長的,控制生長的就是堆棧指針了,最先壓入的參數(shù)是在最上面,就是說在所有參數(shù)的最后面,最后壓入的參數(shù)在最下面,結(jié)構(gòu)上看起來是第一個,所以最后壓入的參數(shù)總是能夠被函數(shù)找到,因為它就在堆棧指針的上方。
printf可以接受多個參數(shù),為什么,請寫出printf的原型?
_CRTIMP __checkReturn_opt int __cdecl printf(__in_z __format_string const char * _Format, ...); 最后的三個點...就是可以輸入多個參數(shù)的,自己寫的函數(shù)也是可以接受多個參數(shù)的。
然后在函數(shù)中使用va_start、va_end、va_list來接受多個參數(shù)C語言中putchar的功能完全可以被printf代替,那么putchar相對printf有什么?
自己實現(xiàn)一個printf也不難,遵循_cdecl約定即可,printf就根據(jù)%的個數(shù)來確定參數(shù)個數(shù).簡單解釋下將用到的3個宏va_list其實只是char*指針而已va_start(ap,arg);一個參數(shù)是va_list變量,arg是第一個參數(shù),指向第一個可變參數(shù).其實現(xiàn)簡易理解為ap=&format+sizeof(arg)va_arg(ap,type),第一個參數(shù)是va_list變量,第二個參數(shù)是可變參數(shù)類型其功能:返回當(dāng)前ap指向的類型變量,并且指向下一個變量*((type*)(ap+=sizeof(type)-sizeof(type));
strlen的返回值怎么看?
size_t __cdecl strlen(const char *); typedef unsigned int size_t; 根據(jù)這兩個申明 可以知道,strlen()函數(shù)的返回值類型是 UINT 無符號整型,范圍0-42億
到此,以上就是小編對于的問題就介紹到這了,希望這4點解答對大家有用。
文章標(biāo)題:printf原理?(__cdecl只在windows上用嗎)
標(biāo)題路徑:http://www.dlmjj.cn/article/dpopdih.html


咨詢
建站咨詢
