printf函式實現

2021-06-05 12:49:07 字數 1076 閱讀 3350

要實現printf函式需要考慮如下三點:

1.如何告訴printf傳入引數的個數:引數個數不確定。

2.printf如何訪問到這些引數。

3.函式呼叫完成後,系統如何釋放在堆疊的引數。

printf函式的定義:(原型)

int  _cdecl  printf(const char* format,...);

注:_cdecl是c/c++預設呼叫方式。 

_cdecl呼叫約定:1.引數從右自左依次入棧。   2.呼叫者負責清理堆疊。 3.引數的資料型別不會導致編譯階段的錯誤。

實現如下:

#include #include void myprintf(const char *format, ...)  

case 's':

default:

putchar(ch);

}//switch結束

}//while 結束

va_end(ap);

}//myprintf結束

void  main()

vc++中stdarg.h裡x86平台的巨集定義

typedef char *  va_list;

#define _intsizeof(n)

( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

#define va_start(va_list ap, format)

( ap = (va_list)& format+ _intsizeof(format) )

#define va_arg(va_list ap,type)

( *(type*)((ap += _intsizeof(type)) -_intsizeof(type)) )

#define va_end(va_list ap)

( ap = (va_list)0 )

printf函式的實現

printf函式是c語言庫函式中的輸出函式。在學習stm32過程用由於需要用到串列埠列印功能,但是程式原來的printf函式列印到串列埠時,出現了大量亂碼。無奈只能自己研究一下printf函式的構成。寫個乙個簡化版的printf函式。int myprintf const char format,wh...

實現自己的printf函式

在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。print.h cpp view plain copy print?ifndef print h define print h void print char fmt,voi...

模擬實現printf函式

如果要想解決這個問題 就要 知道乙個知識點 可變引數列表 可變引數列表是通過巨集來實現的,這些巨集定義於stdarg.h標頭檔案中,它是標準庫的一部分。這個標頭檔案宣告 個型別va list 和三個巨集va start va arg和va end。轉到定義處 檢視一下這幾個巨集和型別 typedef...