vc 中printf的乙個實現

2021-05-22 02:34:08 字數 2107 閱讀 4712

int cdecl messageboxprintf (tchar * szcaption, tchar * szformat, ...)

int winapi winmain (

__in hinstance hinstance,

__in_opt hinstance hprevinstance,

__in_opt lpstr lpcmdline,

__in int nshowcmd

)int __cdecl _vsprintf_l (

char *string,

const char *format,

_locale_t plocinfo,

va_list ap

)else

#endif  /* _count_ */

outfile->_flag = _iowrt|_iostrg;

outfile->_ptr = outfile->_base = string;

#ifndef _swprintfs_error_return_fix

retval = _output_l(outfile, format, plocinfo, ap );

#else  /* _swprintfs_error_return_fix */

retval = outfn(outfile, format, plocinfo, ap );

#endif  /* _swprintfs_error_return_fix */

if ( string==null)

return(retval);

#ifndef _swprintfs_error_return_fix

_putc_nolock('/0',outfile);

return(retval);

#else  /* _swprintfs_error_return_fix */

if((retval >= 0) && (_putc_nolock('/0',outfile) != eof))

return(retval);

string[count - 1] = 0;

if (outfile->_cnt < 0)

return -1;

#endif  /* _swprintfs_error_return_fix */

}int __cdecl _output_l (

file *stream,

const _tchar *format,

_locale_t plocinfo,

va_list argptr

)write_char(ch, &charsout);

break;

#define write_char(ch, pnw)         write_char(ch, stream, pnw)

local(void) write_char (

_tchar ch,

file *f,

int *pnumwritten

)#ifdef _unicode

if (_putwc_nolock(ch, f) == weof)

#else  /* _unicode */

if (_putc_nolock(ch, f) == eof)

#endif  /* _unicode */

*pnumwritten = -1;

else

++(*pnumwritten);

}#define _putc_nolock(_c, _stream)   _fputc_nolock(_c, _stream)

#define _fputc_nolock(_c,_stream)    (--(_stream)._cnt >= 0 ? 0xff & (*(_stream)._ptr++ = (char)(_c)) :  _flsbuf((_c),(_stream)))

//deal with arguments

switch (state)

#define va_arg _crt_va_arg

#define _crt_va_arg(ap,t)    ( *(t *)( (ap += _intsizeof(t)) - _intsizeof(t) )

自己實現乙個printf函式

在arm嵌入式開發環境中,串列埠一般使用arm pl011的uart實現,uart的實現原理就是實現了乙個8bits寬度,32深度的fifo,不停的往螢幕輸出乙個byte,乙個byte。這個就是硬體的實現,那麼軟體是怎麼實現列印 高階程式語言中定義的char,short,int,long,float...

乙個printf引發的問題

牛客網上的乙個題目 intmain 看起來挺簡單的,牽扯的東西比較多。這是我的思路 printf函式執行的時候,會先把這三個數字壓入棧裡,然後再執行列印。壓入棧的時候按照資料本身的長度來,首先把c和b壓入,並且每乙個都是8個位元組 printf自動轉化為double 然後再壓入a是4個位元組。然後再...

乙個簡單的時鐘程式《VC實現》

具體過程 1 首先,我 們建立乙個基於 對話方塊的程式2 在 對話方塊裡建立三個靜 態文字其id分 別為idc hour idc minute idc second 3 用mfc 為三個id 新增變數 變數型別 為cstring m hours m minutes m seconds 4 然後對映訊...